亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2018年10月23日 08:41:54   作者:vcxiaohan2  
這篇文章主要介紹了詳解如何構建Promise隊列實現(xiàn)異步函數(shù)順序執(zhí)行,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

場景

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

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

思路

我們需要實現(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鏈式操作)

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

代碼

//鏈式調用
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對象,都可以使用

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • js+HTML5實現(xiàn)視頻截圖的方法

    js+HTML5實現(xiàn)視頻截圖的方法

    這篇文章主要介紹了js+HTML5實現(xiàn)視頻截圖的方法,涉及javascript操作html5元素實現(xiàn)多媒體文件截圖的相關技巧,需要的朋友可以參考下
    2015-06-06
  • JavaScript 拖拉縮放效果

    JavaScript 拖拉縮放效果

    拖拉縮放效果,實現(xiàn)通過鼠標拖動來調整層的面積(寬高)大小。例如選框效果。
    2008-12-12
  • JavaScript 事件屬性綁定帶參數(shù)的函數(shù)

    JavaScript 事件屬性綁定帶參數(shù)的函數(shù)

    在JavaScript中,為了實現(xiàn)表現(xiàn)和控制相分離,可以通過0級的DOM事件屬性或者2級的事件模型來實現(xiàn),不過這兩者在針對某個事件類型調用相應的事件句柄的時候,不能給事件句柄提供參數(shù),也就是說,事件屬性的值只能是一個函數(shù)引用。
    2009-03-03
  • js構建二叉樹進行數(shù)值數(shù)組的去重與優(yōu)化詳解

    js構建二叉樹進行數(shù)值數(shù)組的去重與優(yōu)化詳解

    這篇文章主要給大家介紹了關于js構建二叉樹進行數(shù)值數(shù)組的去重與優(yōu)化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • JS彈出居中的DIV的代碼

    JS彈出居中的DIV的代碼

    一直都在想怎么樣使彈出的DIV能在任何時候都是居中顯示的,剛開始的時候是用CSS樣式直接定義好層的位置,但是當頁面很長的時候,或是瀏覽器窗口大小不是固定的時候就不能正確的顯示,所以只好用JS來控制DIV的顯示位置。
    2008-06-06
  • jquery獲取radio值(單選組radio)

    jquery獲取radio值(單選組radio)

    jquery獲取radio值使用到特殊的選擇器type=radio,為方便大家理解,另附一個jquery實例,想學習的朋友可以看看
    2014-10-10
  • JavaScript數(shù)組的棧方法與隊列方法詳解

    JavaScript數(shù)組的棧方法與隊列方法詳解

    這篇文章主要介紹了JavaScript數(shù)組的棧方法與隊列方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-05-05
  • js的表單操作 簡單計算器

    js的表單操作 簡單計算器

    javascript寫的簡單的加減乘除計算器,里面涉及到一些方法還是很實用的哦,新手不要錯過
    2011-12-12
  • javascript實現(xiàn)時鐘動畫

    javascript實現(xiàn)時鐘動畫

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)時鐘動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • JS通過相同的name進行表格求和代碼

    JS通過相同的name進行表格求和代碼

    表格求和想必大家并不陌生,下面為大家詳細介紹下通過相同的name進行表格求和,具體實現(xiàn)如下,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-08-08

最新評論