在 Promise.all 中保留顺序
Promise.all 是一个 JavaScript 函数,它接受可迭代的 Promise 并返回一个解析的 Promise一旦所有的输入承诺都得到解决。它通常用于等待多个异步操作完成后再继续。
出现一个常见问题:输出 Promise 中解析值的顺序是否保证与输入 Promise 的顺序匹配?
根据 MDN 文档,传递给 Promise.all 的 then() 回调的值似乎是按照 Promise 的顺序呈现的。此问题寻求规范的确认。
Promise.all 规范 (https://tc39.github.io/ecma262/#sec-promise.all) 指出:
结合这些点,很明显 Promise.all 的输出将始终严格遵循输入可迭代的顺序。这意味着,如果您将数组传递给 Promise.all,解析值将以与输入数组中出现的顺序相同的顺序出现在输出数组中。
为了演示这一点,请考虑以下示例:
<code class="javascript">const promises = [1, 2, 3, 4, 5].map(Promise.resolve); Promise.all(promises).then((results) => { console.log(results); // [1, 2, 3, 4, 5] });</code>
在这种情况下,输出将为 [1, 2, 3, 4, 5],无论哪个 Promise 先解决。
以上是Promise.all 是否保证解析值的顺序与输入可迭代顺序匹配?的详细内容。更多信息请关注PHP中文网其他相关文章!