在這種情況下,您需要確保:
雖然沒有直接的內建解決方案,但以下是實現此行為的方法:
使用遞歸進行手動迭代:
function sequence(arr) { const index = 0; function next() { if (index < arr.length) { arr[index]().then(next).catch(reject); index++; } } next(); }
使用減少:
function sequence(arr) { return arr.reduce((p, item) => { return p.then(() => item()); // Assuming each element is a promise-returning function }, Promise.resolve()); }
使用Promise.mapSeries:
如果您使用的是 Sagebird ,則可以利用其Promise.mapSeries 方法:
function sequence(arr) { return Promise.mapSeries(arr, item => item()); }
使用ES7非同步/等待:
如果支持,您可以使用非同步/等待來實現此目的:
async function sequence(arr) { const results = []; for (let item of arr) { results.push(await item()); } return results; }
使用spex 函式庫:
spex庫提供了一個序列方法,讓您可以迭代動態序列Promise:
import { sequence } from 'spex'; function sequence(nextPromise) { // while nextPromise() creates and returns another promise, continue resolving it; }
請記住,如果數組中的任何元素被拒絕,則一旦遇到該拒絕,序列就會拒絕。此行為可確保不會處理更多元素。
以上是如何按順序執行一系列 Promise 並處理拒絕?的詳細內容。更多資訊請關注PHP中文網其他相關文章!