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

資訊專欄INFORMATION COLUMN

支持Promise的Generator Runner

hellowoody / 1920人閱讀

摘要:為了更斜體文字好的理解生成器協(xié)同運(yùn)作模式,自己自定義一個(gè)獨(dú)立工具,它會(huì)自動(dòng)異步運(yùn)行傳遞給它的生成器,直到結(jié)束把基于回調(diào)的代碼轉(zhuǎn)換為基于的代碼測試拋出異常后是否繼續(xù)執(zhí)行

為了更斜體文字好的理解生成器+Promise協(xié)同運(yùn)作模式,自己自定義一個(gè)獨(dú)立工具run(..),它會(huì)自動(dòng)異步運(yùn)行傳遞給它的生成器,直到結(jié)束

----------
Examples:
    // 把基于回調(diào)的代碼轉(zhuǎn)換為基于Promise的代碼:
    if(!Promise.wrap) {
        Promise.wrap = function(fn) {
            return function() {
                var args = [].slice.call(arguments);
                return new Promise((resolve, reject) => {
                    fn.apply(null, args.concat(function(err, data) {
                        if(err) {
                            reject(err);
                        }else {
                            resolve(data);
                        }
                    }));
                });
            };
        };
    }
    
    function calc(x, y, cb) {
        var sum = x + y;
        if(sum < 10) {
            cb(null, sum);
        }else {
            cb(new Error("stack overflow"));
        }
    }
    
    // Generator Runner
    function run(gen) {
        var args = [].slice.call(arguments, 1);
        var it = gen.apply(this, args);
        return Promise.resolve().then(function handleNext(val) {
            var next = it.next(val);
            
            return (function handleResult(next) {
                if(next.done) {
                    return next.value;
                }else {
                    return Promise.resolve(next.value).then(handleNext, function handleError(err) {
                        return Promise.resolve(it.throw(err)).then(handleResult);
                    });
                }
            })(next);
        });
    }
    
    function* gen() {
        try {
            var res1 = yield Promise.wrap(calc)(1, 2);
            console.log("res1: ", res1);
            
            var res2 = yield Promise.wrap(calc)(5, 6);
            console.log("res2: ", res2);
        } catch(e) {
            console.error(e);
        }
        
        // 測試拋出異常后是否繼續(xù)執(zhí)行
        var res3 = yield Promise.wrap(calc)(3, 4);
        console.log("res3: ", res3);
        
        return "the end";
    }
    
    run(gen).then(val => console.log(val), err => console.error(err));


console output:
res1:  3
Error: stack overflow(…)
res3:  7
the end

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

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

相關(guān)文章

  • JavaScript異步編程:Generator與Async

    摘要:從開始,就在引入新功能,來幫助更簡單的方法來處理異步編程,幫助我們遠(yuǎn)離回調(diào)地獄。而則是為了更簡潔的使用而提出的語法,相比這種的實(shí)現(xiàn)方式,更為專注,生來就是為了處理異步編程。 從Promise開始,JavaScript就在引入新功能,來幫助更簡單的方法來處理異步編程,幫助我們遠(yuǎn)離回調(diào)地獄。 Promise是下邊要講的Generator/yield與async/await的基礎(chǔ),希望你已...

    leon 評論0 收藏0
  • 通過ES6 Generator函數(shù)實(shí)現(xiàn)異步流程

    摘要:換句話說,我們很好的對代碼的功能關(guān)注點(diǎn)進(jìn)行了分離通過將使用消費(fèi)值得地方函數(shù)中的邏輯和通過異步流程來獲取值迭代器的方法進(jìn)行了有效的分離。但是現(xiàn)在我們通過來管理代碼的異步流程部分,我們解決了回調(diào)函數(shù)所帶來的反轉(zhuǎn)控制等問題。 本文翻譯自 Going Async With ES6 Generators 由于個(gè)人能力知識(shí)有限,翻譯過程中難免有紕漏和錯(cuò)誤,還望指正Issue ES6 Gener...

    劉厚水 評論0 收藏0
  • ES6常用知識(shí)學(xué)習(xí)札記

    摘要:在年正式發(fā)布了,簡稱,又稱為。再次簡寫循環(huán)迭代數(shù)組每個(gè)元素都執(zhí)行一次回調(diào)函數(shù)。方法用于調(diào)用數(shù)組的每個(gè)元素,并將元素傳遞給回調(diào)函數(shù)。注意對于空數(shù)組是不會(huì)執(zhí)行回調(diào)函數(shù)的。 轉(zhuǎn)載請注明出處 原文連接 http://blog.huanghanlian.com/article/5c7aa6c7bf3acc0864870f9d es6 是什么 首先弄明白ECMA和js的關(guān)系。ECMA是標(biāo)準(zhǔn),Jav...

    googollee 評論0 收藏0
  • ES6常用知識(shí)學(xué)習(xí)札記

    摘要:在年正式發(fā)布了,簡稱,又稱為。再次簡寫循環(huán)迭代數(shù)組每個(gè)元素都執(zhí)行一次回調(diào)函數(shù)。方法用于調(diào)用數(shù)組的每個(gè)元素,并將元素傳遞給回調(diào)函數(shù)。注意對于空數(shù)組是不會(huì)執(zhí)行回調(diào)函數(shù)的。 轉(zhuǎn)載請注明出處 原文連接 http://blog.huanghanlian.com/article/5c7aa6c7bf3acc0864870f9d es6 是什么 首先弄明白ECMA和js的關(guān)系。ECMA是標(biāo)準(zhǔn),Jav...

    tracymac7 評論0 收藏0
  • ES6 Generator實(shí)現(xiàn)協(xié)同程序

    摘要:關(guān)鍵字表示代碼在該處將會(huì)被阻塞式暫停阻塞的僅僅是函數(shù)代碼本身,而不是整個(gè)程序,但是這并沒有引起函數(shù)內(nèi)部自頂向下代碼的絲毫改變。通過實(shí)現(xiàn)模式在通過實(shí)現(xiàn)理論的過程中已經(jīng)有一些有趣的探索了。 至此本系列的四篇文章翻譯完結(jié),查看完整系列請移步blogs 由于個(gè)人能力知識(shí)有限,翻譯過程中難免有紕漏和錯(cuò)誤,望不吝指正issue ES6 Generators: 完整系列 The Basics...

    MudOnTire 評論0 收藏0

發(fā)表評論

0條評論

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