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

資訊專欄INFORMATION COLUMN

co模塊的前端實(shí)現(xiàn)

Vixb / 2286人閱讀

摘要:模塊的意義和原理在上已經(jīng)有詳細(xì)的介紹了,具體參見(jiàn)用法異常處理輸出結(jié)果應(yīng)該為源碼各種模塊加載方式的處理下面這倆函數(shù)是有用的主該函數(shù)會(huì)在異步過(guò)程執(zhí)行完畢后被調(diào)用會(huì)喚醒主函數(shù)繼續(xù)執(zhí)行到下一個(gè)或?yàn)橹埂?/p>

其實(shí)就是照著網(wǎng)上的介紹和co的源碼實(shí)現(xiàn)了一個(gè)自己用的前端async模塊。支持RequireJS和SeaJS,支持$.ajax。
有喜歡co但是不知道怎么用的前端朋友可以拿去用。

co模塊的意義和原理在sf上已經(jīng)有詳細(xì)的介紹了,具體參見(jiàn):
http://segmentfault.com/a/1190000002732081

用法:

async(function* () {
    var a = yield Promise.resolve(1);
    console.log(a);
    var b = yield [Promise.resolve(2), Promise.resolve(3)];
    console.log(b);
    return 4;
}).then(function (value) {
    console.log(value);
}).catch(function (e) {
    // 異常處理
});

// 輸出結(jié)果應(yīng)該為 1 [2,3] 4

源碼:

/*global exports*/
"use strict";
(function (factory) {
    // 各種模塊加載方式的處理
    if (typeof define === "function" && define.amd) {
        define([], factory);
    } else if (typeof define === "function" && define.cmd) {
        define(function (require, exports, module) {
            module.exports = factory(jQuery);
        });
    } else if (typeof exports === "object") {
        exports.async = factory();
    } else {
        // window.async=factory();
    }
}(function () {
    // 下面這倆函數(shù)是有用的
    function async(generator) {
        // 主Promise
        return new Promise(function (resolve, reject) {
            var g = generator();
            /**
             *  該函數(shù)會(huì)在異步過(guò)程執(zhí)行完畢后被調(diào)用,會(huì)喚醒主函數(shù)繼續(xù)執(zhí)行到下一個(gè)yield或return為止。
             *  參數(shù)val為異步過(guò)程的結(jié)果,即promise.result。
             *  返回值為主函數(shù)內(nèi)yield或return的結(jié)果,
             *  如果是yield則必須為promise或可被autoPack包裝的對(duì)象,或者包含前兩者的數(shù)組
             */
            function next(val) {
            
                // 將上次運(yùn)行結(jié)果返回給主函數(shù),令主函數(shù)繼續(xù)執(zhí)行到下一處中斷,并將結(jié)果存入result
                var result = g.next(val);
                // 暫存主函數(shù)運(yùn)行結(jié)果
                var promise = result.value;
                // 判斷主函數(shù)是否執(zhí)行完畢,執(zhí)行完畢則調(diào)用resolve完成主Promise,否則繼續(xù)執(zhí)行
                if (!result.done) {
                    // 判斷主函數(shù)提供的參數(shù)是否為數(shù)組,
                    // 如果不是數(shù)組則用autoPack封裝后通過(guò)then(next)綁定下一步流程。并通過(guò)catch(reject)拋出異常
                    // 如果是數(shù)組則對(duì)每個(gè)成員進(jìn)行封裝后用Promise.All打包,然后繼續(xù)執(zhí)行。
                    if (promise instanceof Array) {
                        Promise.all(promise.map(autoPack)).then(next).catch(reject);
                    } else {
                        autoPack(promise).then(next).catch(reject);
                    }
                } else {
                    resolve(promise);
                }
            }

            // 捕獲并通過(guò)reject拋出異常
            try {
                next();
            } catch (e) {
                reject(e);
            }
        })
    }

    // 自動(dòng)打包,可以將第三方實(shí)現(xiàn)的Promise工具打包為ES6標(biāo)準(zhǔn)的Promise
    // 目前僅支持jQuery.Promise
    function autoPack(target) {
        // 包裝$.ajax
        if (target.error) {
            return new Promise(function (resolve, reject) {
                target.done(resolve).error(reject);
            })
        } else {
            return target;
        }
    }

    return async;
}));

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

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

相關(guān)文章

  • 前端每周清單半年盤點(diǎn)之 Node.js 篇

    摘要:前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。對(duì)該漏洞的綜合評(píng)級(jí)為高危。目前,相關(guān)利用方式已經(jīng)在互聯(lián)網(wǎng)上公開,近期出現(xiàn)攻擊嘗試爆發(fā)的可能。 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開發(fā)教程、工程實(shí)踐、深度閱讀、開源項(xiàng)目、巔峰人生等欄目。歡...

    kid143 評(píng)論0 收藏0
  • 前端每周清單第 12 期:支付寶前端構(gòu)建工具發(fā)展、LinkedIn用Brotli加快網(wǎng)頁(yè)響應(yīng)速度、餓

    摘要:前端每周清單第期支付寶前端構(gòu)建工具發(fā)展用加快網(wǎng)頁(yè)響應(yīng)速度餓了么升級(jí)實(shí)踐前端前端每周清單前端每周清單專注前端領(lǐng)域內(nèi)容,分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。 前端每周清單第 12 期:支付寶前端構(gòu)建工具發(fā)展、LinkedIn用Brotli加快網(wǎng)頁(yè)響應(yīng)速度、餓了么PWA 升級(jí)實(shí)踐 為InfoQ中文站特供稿件,首發(fā)地址為這里;如需轉(zhuǎn)載,請(qǐng)與InfoQ中文站聯(lián)系。從屬于筆...

    liuchengxu 評(píng)論0 收藏0
  • 異步流程控制:7 行代碼學(xué)會(huì) co 模塊

    摘要:而在中是迭代器生成器,被創(chuàng)造性的拿來(lái)做異步流程控制了。當(dāng)執(zhí)行的時(shí)候,并不執(zhí)行函數(shù)體,而是返回一個(gè)迭代器。行代碼再看看文章開頭的行代碼首先生成一個(gè)迭代器,然后執(zhí)行一遍,得到的是一個(gè)對(duì)象,里面再執(zhí)行。 廣告招人:阿里巴巴招前端,在這里你可以享受大公司的福利和技術(shù)體系,也有小團(tuán)隊(duì)的挑戰(zhàn)和成長(zhǎng)空間。聯(lián)系: qingguang.meiqg at alibaba-inc.com 首先請(qǐng)?jiān)徫业臉?biāo)題...

    tinna 評(píng)論0 收藏0
  • 前端每周清單半年盤點(diǎn)之 Angular 篇

    摘要:延伸閱讀學(xué)習(xí)與實(shí)踐資料索引與前端工程化實(shí)踐前端每周清單半年盤點(diǎn)之篇前端每周清單半年盤點(diǎn)之與篇前端每周清單半年盤點(diǎn)之篇 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開發(fā)教程、工程實(shí)踐、深度閱讀、開源項(xiàng)目、巔峰人生等欄目。歡迎關(guān)注【前端之巔】微信公眾號(hào)(ID:frontshow),及時(shí)獲取前端每周清單;本文則是對(duì)于半年來(lái)發(fā)布的前端每周清單...

    LeviDing 評(píng)論0 收藏0
  • 前端每周清單半年盤點(diǎn)之 JavaScript 篇

    摘要:前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。背后的故事本文是對(duì)于年之間世界發(fā)生的大事件的詳細(xì)介紹,闡述了從提出到角力到流產(chǎn)的前世今生。 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開發(fā)教程、工程實(shí)踐、深度閱讀、開源項(xiàng)目、巔峰人生等欄目。歡迎...

    Vixb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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