国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

異步編程技巧

崔曉明 / 3315人閱讀

摘要:揭示的編程技巧為什么能改善異步編程方法這主要是因?yàn)槌绦騿T編寫程序時(shí),總是按照自己的思考習(xí)慣和代碼組織習(xí)慣編寫程序,偏向于同步執(zhí)行過程。

先看一個(gè)例子
var Promise = require("promise-tiny");

new Promise(function(resolve, reject) {    // 注意resolve和reject這兩個(gè)參數(shù),實(shí)際就是then和catch的參數(shù)
        var r = Math.random();
        if(r >= 0.5) resolve("success");
        else reject("fail");
    })
   .then(function(value) {        // >=0.5時(shí),調(diào)用這個(gè)函數(shù)
        console.log(value);
    })
   .catch(function(value) {        // <0.5時(shí),調(diào)用這個(gè)函數(shù)
        console.log(value);
    });
promise-tiny的實(shí)現(xiàn)代碼
class Promise {                // 這段代碼主要用于揭示實(shí)現(xiàn)原理,對理解異步編程技巧很有幫助
    constructor(factory) {
        this.flag = "Pending";        // flag值域 "Pending","Resolved","Rejected"
        this.args = [];
        this.func = {};

        function next(flag, value) {    // next這個(gè)函數(shù)是精華,factory沒有參數(shù)運(yùn)行起來,全靠它了
            this.flag = flag;
            this.args = [].concat(value);
            this.func[flag] && this.func[flag].apply(undefined, this.args);
        }

        factory(next.bind(this, "Resolved"), next.bind(this, "Rejected"));
    }

    then(func) {
        if(this.flag==="Resolved") func.apply(undefined, this.args);
        else this.func["Resolved"] = func;
        return this;
    }

    catch(func) {
        if(this.flag==="Rejected") func.apply(undefined, this.args);
        else this.func["Rejected"] = func;
        return this;
    }
}
理解了原理,就覺得應(yīng)該能實(shí)現(xiàn)的更好。還是先看一個(gè)例子
var Steps = require("promise-tiny/Steps");

class Count {
    constructor() {
        this._step = 0;
    }
    get step() {
        return this._step;
    }
    set step(n) {
        this._step = n;
    }
}

new Steps(new Count)
   .on("Begin", function(next) {
        this.step++;
        next("check", "Begin");
    })
   .on("check", function(next, ...args) {
        this.step++;
        next("create", [].concat(args, "check"));
    })
   .on("create", function(next, ...args) {
        this.step++;
        next("error", [].concat(args, "create"));
    })
   .on("logout", function(next, ...args) {
        this.step++;
        next("End", [].concat(args, "logout"));
    })
   .on("error", function(next, ...args) {
        this.step++;
        next("End", [].concat(args, "error"));
    })
   .on("End", function(next, ...args) {
        this.step++;
        console.log("Steps: "+this.step, "trace: "+[].concat(args, "End").join("->"));

        next("new Steps", { id: "!Count", count: 0 });
    })
   .on("Begin", function(next, ...args) {
        this.count++;
        next("info", [].concat(args, "Begin"));
    })
   .on("info", function(next, ...args) {
        this.count++;
        next("logout", [].concat(args, "info"));
    })
   .on("logout", function(next, ...args) {
        this.count++;
        next("End", [].concat(args, "logout"));
    })
   .on("error", function(next, ...args) {
        this.count++;
        next("End", [].concat(args, "error"));
    })
   .on("End", function(next, ...args) {
        this.count++;
        console.log("Count: "+this.count, "trace: "+[].concat(args, "End").join("->"), this.id);
    });

結(jié)果

Steps: 5 trace: Begin->check->create->error->End
Count: 4 trace: new Steps->Begin->info->logout->End !Count

Promise代碼體會(huì)

帶有一個(gè)函數(shù)參數(shù)的函數(shù) f1(f2) ,可以先造一個(gè)f2’,這樣就可以把它執(zhí)行了 f1(f2’)。

這個(gè)f2’的功能要這樣實(shí)現(xiàn):當(dāng)執(zhí)行到f2’時(shí),f2’要檢查真實(shí)的f2是否已經(jīng)準(zhǔn)備好了?如果準(zhǔn)備好了,就調(diào)用真實(shí)的f2;否則,要把調(diào)用f2的參數(shù)都記下來,等f2準(zhǔn)備好時(shí)調(diào)用。

這樣就不需要要求調(diào)用f1時(shí),f2必須準(zhǔn)備好了。但額外要提供一個(gè)提交f2的方法。

以上就是Promise揭示的異步編程技巧。在Promise中,factory是f1;resolve和reject是f2’;then和catch是提交f2的方法。

Promise揭示的編程技巧為什么能改善異步編程方法?

這主要是因?yàn)槌绦騿T編寫程序時(shí),總是按照自己的思考習(xí)慣和代碼組織習(xí)慣編寫程序,偏向于同步執(zhí)行過程。代碼的提交次序與機(jī)器執(zhí)行次序有著很大差異!Promise揭示的技巧使程序員能夠不用考慮機(jī)器的執(zhí)行次序,給點(diǎn)代碼就先執(zhí)行著,碰到?jīng)]給的代碼就記錄下來,等后續(xù)代碼提交后接著執(zhí)行。這樣,程序員只要保證最終把所有代碼都提交就可以了。

應(yīng)該有更好的實(shí)現(xiàn)

既然有這樣好的思路,再回頭看看Promise的實(shí)現(xiàn),其中缺陷不言而喻。Steps是一次嘗試,考慮的問題要比Promise多一些。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/87739.html

相關(guān)文章

  • js學(xué)習(xí)之異步處理

    摘要:學(xué)習(xí)開發(fā),無論是前端開發(fā)還是都避免不了要接觸異步編程這個(gè)問題就和其它大多數(shù)以多線程同步為主的編程語言不同的主要設(shè)計(jì)是單線程異步模型。由于異步編程可以實(shí)現(xiàn)非阻塞的調(diào)用效果,引入異步編程自然就是順理成章的事情了。 學(xué)習(xí)js開發(fā),無論是前端開發(fā)還是node.js,都避免不了要接觸異步編程這個(gè)問題,就和其它大多數(shù)以多線程同步為主的編程語言不同,js的主要設(shè)計(jì)是單線程異步模型。正因?yàn)閖s天生的與...

    VioletJack 評論0 收藏0
  • nodejs異步編程詳解

    摘要:四異步編程解決方案模式模式一定程度上緩解了嵌套回調(diào)的問題,只會(huì)處在未完成完成態(tài)失敗態(tài)中的一種,只會(huì)從未完成轉(zhuǎn)化為完成態(tài)或者失敗態(tài),不能逆轉(zhuǎn)。 一、從一個(gè)簡單的案例開始 fs.readdir(path.join(__dirname, ./index.js), (err, files) => { files.foreach((filename, index) => { ...

    inapt 評論0 收藏0
  • Javascript中的異步編程

    摘要:接下來,我們一起來看看中的異步編程,具體有哪幾種。實(shí)現(xiàn)異步編程的方法一回調(diào)函數(shù)上面不止一次提到了回調(diào)函數(shù)。它是異步編程中,最基本的方法。四對象接下來,我們聊聊與相關(guān)的異步編程方法,對象。 showImg(https://segmentfault.com/img/bVbneWy?w=1600&h=1200); 前言 最近,小伙伴S 問了我一段代碼: const funB = (value...

    wemall 評論0 收藏0
  • [ JS 進(jìn)階 ] 異步編程 promise模式 的簡單實(shí)現(xiàn)

    摘要:為了降低異步編程的復(fù)雜性,所以。難理解請參考的誤區(qū)以及實(shí)踐異步編程的模式異步編程的種方法 異步編程 javascript異步編程, web2.0時(shí)代比較熱門的編程方式,我們平時(shí)碼的時(shí)候也或多或少用到,最典型的就是異步ajax,發(fā)送異步請求,綁定回調(diào)函數(shù),請求響應(yīng)之后調(diào)用指定的回調(diào)函數(shù),沒有阻塞其他代碼的執(zhí)行。還有像setTimeout方法同樣也是異步執(zhí)行回調(diào)的方法。 如果對異步編程...

    svtter 評論0 收藏0
  • 【Node Hero】3. 理解異步編程

    摘要:異步編程在傳統(tǒng)編程實(shí)踐中,大多數(shù)操作都是同步發(fā)生的。中的異步編程異步是一種輸入輸出處理的形式,它允許在傳輸完成之前,其它處理能繼續(xù)進(jìn)行。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1759原文:https://blog.risingstack.com/node-hero-async-programming-in-node-js/ ...

    kevin 評論0 收藏0
  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<