使用 reduce 進行 Promise 排隊執行?你們學會了嗎?

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心。

Promise.all

在平時的開發中,我們涉及到多個異步方法的執行的時候,就會想到一個方法Promise.all,這個方法可以將所有異步操作返回的結果,按順序組成一個數組,返回給你

// 多個promise
const promises = [.....]

Promise.all(promises).then(res ={
  console.log(res)
  // [.....] 結果
})

注意:有序的結果不代表有序的執行!

排隊執行

Promise.all是併發的,也就是執行的順序是無序的,那如果我想有序的話,怎麼做呢?

// 多個promise
const promises = [.....]

for(let promise of promises) {
  await promise()
}

這樣其實也行,但是會引起eslint的報錯

利用 reduce 進行排隊

這幾天在看同事的代碼時,發現了一種排隊執行 Promise 的寫法,挺有意思的,是利用了數組的reduce方法

promises.reduce(
(prev, next) => prev.then(() => next.action()), 
Promise.resolve()
);

就是利用了 Promise 的鏈式then方法,進行排隊,覺得這種寫法挺有意思的,所以分享給大家,就當做一個小知識吧~

前端之神 一位前端小菜雞,寫過 100 多篇原創文章,全網有 5w + 個前端朋友,夢想是成爲” 前端之神 “~

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/O2RBPM0yq90_M2Qb9K4Z9A