使用数组时,通常需要为每个元素顺序执行一系列任务,并在 Promise 之间传递参数。
要实现这一点,可以使用一系列嵌套的 .then() 调用。然而,随着数组大小的增加,这种方法变得麻烦且不灵活。
一个简洁的解决方案是使用 .reduce() 方法将数组折叠成一系列Promise 数量:
<code class="js">const promiseChain = myArray.reduce( (p, x) => p.then(() => myPromise(x)), Promise.resolve() );</code>
更易于维护的方法是使用异步函数来迭代数组并按顺序执行每个 Promise:
<code class="js">const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x); } }; forEachSeries(myArray, myPromise);</code>
如果需要promise的返回值,可以对mapSeries函数稍作修改:
<code class="js">const mapSeries = async (iterable, fn) => { const results = []; for (const x of iterable) { results.push(await fn(x)); } return results; };</code>
这种方法在以下情况下提供了更大的灵活性和代码可读性:处理承诺的动态数组。
以上是如何为动态数组顺序执行 Promise?的详细内容。更多信息请关注PHP中文网其他相关文章!