首页 > web前端 > js教程 > 正文

Promise.all 是否保证解析值的顺序与输入可迭代顺序匹配?

Barbara Streisand
发布: 2024-11-03 14:41:31
原创
580 人浏览过

Does Promise.all Guarantee the Order of Resolved Values Matches the Input Iterable Order?

在 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(iterable) 将一个可迭代对象作为输入,并使用 IteratorStep(iterator) 对其进行迭代。
  • 每个已解析的 Promise 都有一个内部 [[Index]] 槽,该槽指示其在原始可迭代对象中的索引。
  • 解析是通过 Promise.all() Resolve 实现的,其中解析的 Promise 的 [[Index]] 槽用于确定输出数组中值的索引。

结合这些点,很明显 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板