<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        詳解如何構建Promise隊列實現(xiàn)異步函數(shù)順序執(zhí)行

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:05:56
        文檔

        詳解如何構建Promise隊列實現(xiàn)異步函數(shù)順序執(zhí)行

        詳解如何構建Promise隊列實現(xiàn)異步函數(shù)順序執(zhí)行:場景 有a、b、c三個異步任務,要求必須先執(zhí)行a,再執(zhí)行b,最后執(zhí)行c 且下一次任務必須要拿到上一次任務執(zhí)行的結(jié)果,才能做操作 思路 我們需要實現(xiàn)一個隊列,將這些異步函數(shù)添加進隊列并且管理它們的執(zhí)行,隊列具有First In First Out的特性,也就是
        推薦度:
        導讀詳解如何構建Promise隊列實現(xiàn)異步函數(shù)順序執(zhí)行:場景 有a、b、c三個異步任務,要求必須先執(zhí)行a,再執(zhí)行b,最后執(zhí)行c 且下一次任務必須要拿到上一次任務執(zhí)行的結(jié)果,才能做操作 思路 我們需要實現(xiàn)一個隊列,將這些異步函數(shù)添加進隊列并且管理它們的執(zhí)行,隊列具有First In First Out的特性,也就是

        場景

        有a、b、c三個異步任務,要求必須先執(zhí)行a,再執(zhí)行b,最后執(zhí)行c

        且下一次任務必須要拿到上一次任務執(zhí)行的結(jié)果,才能做操作

        思路

        我們需要實現(xiàn)一個隊列,將這些異步函數(shù)添加進隊列并且管理它們的執(zhí)行,隊列具有First In First Out的特性,也就是先添加進去的會被先執(zhí)行,接著才會執(zhí)行下一個(注意跟棧作區(qū)別)

        大家也可以類比一下jQuery的animate方法,添加多個動畫也會按順序執(zhí)行

        解決

        模擬3個異步函數(shù)

        // 異步函數(shù)a
        var a = function () {
         return new Promise(function (resolve, reject) {
         setTimeout(function () {
         resolve('a')
         }, 1000)
         })
        }
        
        // 異步函數(shù)b
        var b = function (data) {
         return new Promise(function (resolve, reject) {
         resolve(data + 'b')
         })
        }
        
        // 異步函數(shù)c
        var c = function (data) {
         return new Promise(function (resolve, reject) {
         setTimeout(function () {
         resolve(data + 'c')
         }, 500)
         })
        }

        解決方法一(使用then鏈式操作)

        特點:可以滿足需求,但是書寫比較繁瑣

        代碼

        //鏈式調(diào)用
        a()
         .then(function (data) {
         return b(data)
         })
         .then(function (data) {
         return c(data)
         })
         .then(function (data) {
         console.log(data)// abc
         })
        

        方法二(構建隊列)

        特點:封裝方法,可移植到別處使用

        代碼

        // 構建隊列
        function queue(arr) {
         var sequence = Promise.resolve()
         arr.forEach(function (item) {
         sequence = sequence.then(item)
         })
         return sequence
        }
        
        // 執(zhí)行隊列
        queue([a, b, c])
         .then(data => {
         console.log(data)// abc
         })

        方法三(使用async、await構建隊列)

        同方法二,只是顯得更高大上點

        代碼

        async function queue(arr) {
         let res = null
         for (let promise of arr) {
         res = await promise(res)
         }
         return await res
        }
        queue([a, b, c])
         .then(data => {
         console.log(data)// abc
         })
        

        順便說一句,bluebird的Promise.reduce也可以用來順序執(zhí)行函數(shù),但是可使用的場景非常有限,一般用來讀取文件信息,而以上給出的方法,不管你在異步函數(shù)中做了什么,只要函數(shù)最后返回了一個Promise對象,都可以使用

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        詳解如何構建Promise隊列實現(xiàn)異步函數(shù)順序執(zhí)行

        詳解如何構建Promise隊列實現(xiàn)異步函數(shù)順序執(zhí)行:場景 有a、b、c三個異步任務,要求必須先執(zhí)行a,再執(zhí)行b,最后執(zhí)行c 且下一次任務必須要拿到上一次任務執(zhí)行的結(jié)果,才能做操作 思路 我們需要實現(xiàn)一個隊列,將這些異步函數(shù)添加進隊列并且管理它們的執(zhí)行,隊列具有First In First Out的特性,也就是
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久久久国产精品免费免费不卡| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 24小时日本韩国高清免费| 亚洲av无码专区国产乱码在线观看| 国产免费A∨在线播放| 国产成人麻豆亚洲综合无码精品| 一级毛片正片免费视频手机看 | 亚洲av最新在线网址| 中文字幕免费在线看| 亚洲国产精品一区二区久久hs| 免费无码黄网站在线看| 亚洲免费视频网站| 91麻豆最新在线人成免费观看| 亚洲a视频在线观看| 国产美女精品久久久久久久免费| 香蕉97碰碰视频免费| 精品国产亚洲男女在线线电影| 一个人看的www免费视频在线观看| 亚洲一卡2卡三卡4卡有限公司| 69国产精品视频免费| 久久亚洲精品国产精品婷婷| 狼友av永久网站免费观看| 一级做a爱过程免费视频高清| 亚洲一区二区三区在线观看精品中文| 日韩精品无码免费一区二区三区| 亚洲免费福利在线视频| 免费在线观看亚洲| 久久一本岛在免费线观看2020| 亚洲沟沟美女亚洲沟沟| 免费A级毛片在线播放不收费| 国产精成人品日日拍夜夜免费| 久久亚洲国产最新网站| 久久久久噜噜噜亚洲熟女综合 | 亚洲阿v天堂在线2017免费| 亚洲精品综合一二三区在线| 妞干网在线免费观看| 中国一级全黄的免费观看| 亚洲午夜在线一区| 亚洲色偷偷狠狠综合网| 无码少妇一区二区浪潮免费| 一区二区三区视频免费|