国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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隊列實現異步函數順序執行

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

詳解如何構建Promise隊列實現異步函數順序執行

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

場景

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

且下一次任務必須要拿到上一次任務執行的結果,才能做操作

思路

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

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

解決

模擬3個異步函數

// 異步函數a
var a = function () {
 return new Promise(function (resolve, reject) {
 setTimeout(function () {
 resolve('a')
 }, 1000)
 })
}

// 異步函數b
var b = function (data) {
 return new Promise(function (resolve, reject) {
 resolve(data + 'b')
 })
}

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

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

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

代碼

//鏈式調用
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
}

// 執行隊列
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也可以用來順序執行函數,但是可使用的場景非常有限,一般用來讀取文件信息,而以上給出的方法,不管你在異步函數中做了什么,只要函數最后返回了一個Promise對象,都可以使用

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

文檔

詳解如何構建Promise隊列實現異步函數順序執行

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美日韩国产在线播放 | 日韩第七页 | 91中文字幕在线 | 亚洲欧美国产精品专区久久 | 欧美日韩亚洲综合另类ac | 欧美成人看片一区二区三区尤物 | 日韩精品欧美亚洲高清有无 | 日韩欧美国产高清 | 成人亚洲国产综合精品91 | 国产在线观看一区二区三区 | 初撮六十路 | 国产在线精品一区二区 | 久久999| 欧美一级高清片欧美国产欧美 | 亚洲国产成人久久综合一 | 午夜国产在线视频 | 欧美 韩国 精品 另类 综合 | 亚洲视频在线观看 | 一级毛片特黄久久免费看 | 视频二区 素人 欧美 日韩 | 91视频高清 | 最新亚洲 | 欧美一区二区三区香蕉视 | 免费一看一级毛片人 | 一区二区三区成人 | 欧美日韩一本 | 亚洲 欧美 中文 日韩专区 | a色毛片免费视频 | 日本丶国产丶欧美色综合 | 国产精品成人h片在线 | 久久精品国产欧美成人 | 激情另类国内一区二区视频 | 亚洲欧洲日韩 | 国产成人综合久久精品下载 | 国产精品亚洲综合一区 | 亚洲精彩视频 | 91视频中文字幕 | 永久毛片 | 欧美日韩高清一区二区三区 | 伊人久久精品久久亚洲一区 | 日韩精品一区二区三区国语自制 |