在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大法,可以看出對(duì)在 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的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
JavaScript實(shí)現(xiàn)同步于本地時(shí)間的動(dòng)態(tài)時(shí)間顯示方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)同步于本地時(shí)間的動(dòng)態(tài)時(shí)間顯示方法,實(shí)例分析了javascript獲取本地時(shí)間及動(dòng)態(tài)顯示的技巧,并對(duì)實(shí)現(xiàn)代碼進(jìn)行了較為詳盡的分析說明,需要的朋友可以參考下2015-02-02bootstrap-table.js擴(kuò)展分頁工具欄(增加跳轉(zhuǎn)到xx頁)功能
這篇文章主要介紹了bootstrap-table.js擴(kuò)展分頁工具欄,增加跳轉(zhuǎn)到xx頁功能,由于小編的水平停留在dom級(jí),此次擴(kuò)展只支持頁面上的表格,如果大家有好的建議歡迎提出2017-12-12JavaScript實(shí)現(xiàn)日期格式化的操作詳解
在我們做業(yè)務(wù)開發(fā)的漫長歲月里,會(huì)多次跟時(shí)間打交道,相信大多數(shù)小伙伴對(duì)日期格式化也并不陌生,本文簡單記錄了JavaScript實(shí)現(xiàn)日期格式化的過程,以及一些拓展,希望對(duì)大家有所幫助2023-05-05JavaScript中Window對(duì)象的屬性及事件
這篇文章主要介紹了JavaScript中Window對(duì)象的屬性及事件 的相關(guān)資料,需要的朋友可以參考下2015-12-12微信小程序自定義頭部導(dǎo)航欄和導(dǎo)航欄背景圖片 navigationStyle問題
這篇文章主要介紹了微信小程序 自定義頭部導(dǎo)航欄和導(dǎo)航欄背景圖片 navigationStyle功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07