在这种情况下,您需要确保:
虽然没有直接的内置解决方案,但以下是实现此行为的方法:
使用递归进行手动迭代:
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:
如果您使用的是 Bluebird Promise 库,则可以利用其 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中文网其他相关文章!