欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

場(chǎng)景

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

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

思路

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

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

解決

模擬3個(gè)異步函數(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鏈?zhǔn)讲僮?

特點(diǎn):可以滿足需求,但是書寫比較繁瑣

代碼

//鏈?zhǔn)秸{(diào)用
a()
 .then(function (data) {
  return b(data)
 })
 .then(function (data) {
  return c(data)
 })
 .then(function (data) {
  console.log(data)// abc
 })

方法二(構(gòu)建隊(duì)列)

特點(diǎn):封裝方法,可移植到別處使用

代碼

// 構(gòu)建隊(duì)列
function queue(arr) {
 var sequence = Promise.resolve()
 arr.forEach(function (item) {
  sequence = sequence.then(item)
 })
 return sequence
}

// 執(zhí)行隊(duì)列
queue([a, b, c])
 .then(data => {
  console.log(data)// abc
 })

方法三(使用async、await構(gòu)建隊(duì)列)

同方法二,只是顯得更高大上點(diǎn)

代碼

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
 })

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    JavaScript 拖拉縮放效果

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

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

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

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

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

    JS彈出居中的DIV的代碼

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

    jquery獲取radio值(單選組radio)

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

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

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

    js的表單操作 簡(jiǎn)單計(jì)算器

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

    javascript實(shí)現(xiàn)時(shí)鐘動(dòng)畫

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

    JS通過(guò)相同的name進(jìn)行表格求和代碼

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

最新評(píng)論