在JS循環(huán)中使用async/await的方法
async / await是ES7的重要特性之一,也是目前社區(qū)里公認(rèn)的優(yōu)秀異步解決方案。目前,async / await這個(gè)特性已經(jīng)是stage 3的建議,可以看看TC39的進(jìn)度,本篇文章將分享在JS循環(huán)中使用async/await的方法.
在開發(fā)maty.js時(shí),遇到一個(gè)數(shù)組任務(wù),數(shù)組項(xiàng)是內(nèi)部異步執(zhí)行的函數(shù),期望是同步依次執(zhí)行每項(xiàng)函數(shù),每項(xiàng)函數(shù)執(zhí)行完本身的異步任務(wù)后,繼續(xù)下一項(xiàng)。
剛開始單純使用map來循環(huán)執(zhí)行,并且await每項(xiàng)函數(shù)。如下所示:
starters.map(async (fn, i)=> {
console.log('++++++++++: ', i)
await fn(ctx);
});
結(jié)果是依次先輸出了索引i,而不是阻塞每次循環(huán),按期望執(zhí)行。
搬出Google大法,可以看出對在 for…of 循環(huán)語法中使用await是有效的。
for (const fn of starters) {
await fn(ctx);
}
同時(shí)文章中指出使用Promise.all,是無法解決當(dāng)前問題的,因?yàn)閍ll方法是并行運(yùn)行的。很奇怪為什么沒有串行執(zhí)行的原生方法。
總結(jié)
以上所述是小編給大家介紹的在JS循環(huán)中使用async/await的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
nuxt配置通過指定IP和端口訪問的實(shí)現(xiàn)
這篇文章主要介紹了nuxt配置通過指定IP和端口訪問的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
用javascript實(shí)現(xiàn)分割提取頁面所需內(nèi)容
用javascript實(shí)現(xiàn)分割提取頁面所需內(nèi)容...2007-05-05
js監(jiān)聽input輸入框值的實(shí)時(shí)變化實(shí)例
下面小編就為大家?guī)硪黄猨s監(jiān)聽input輸入框值的實(shí)時(shí)變化實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
JavaScript實(shí)現(xiàn)動(dòng)態(tài)添加,刪除行的方法實(shí)例詳解
這篇文章主要介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)添加,刪除行的方法,較為詳細(xì)的分析了javascript操作table表格實(shí)現(xiàn)針對表格元素動(dòng)態(tài)操作的相關(guān)技巧,需要的朋友可以參考下2015-07-07
javascript showModalDialog傳值與FireFox的window.open 父子窗口傳值示例
javascript showModalDialog傳值與FireFox的window.open 父子窗口傳值示例代碼。2009-11-11
使用OpenLayers3 添加地圖鼠標(biāo)右鍵菜單
這篇文章主要介紹了使用OpenLayers3 添加地圖鼠標(biāo)右鍵菜單的相關(guān)資料,需要的朋友可以參考下2015-12-12

