摘要:模塊的意義和原理在上已經(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
摘要:前端每周清單專注前端領(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)目、巔峰人生等欄目。歡...
摘要:前端每周清單第期支付寶前端構(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)系。從屬于筆...
摘要:而在中是迭代器生成器,被創(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)題...
摘要:延伸閱讀學(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ā)布的前端每周清單...
摘要:前端每周清單專注前端領(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)目、巔峰人生等欄目。歡迎...
閱讀 3466·2023-04-26 02:31
閱讀 3630·2021-11-23 09:51
閱讀 1295·2021-11-17 09:33
閱讀 2446·2021-11-16 11:45
閱讀 2577·2021-10-11 11:12
閱讀 2418·2021-09-22 15:22
閱讀 2721·2021-09-04 16:40
閱讀 2583·2021-07-30 15:30