首页  >  文章  >  web前端  >  `Promise.all` 是否保留解析值的顺序?

`Promise.all` 是否保留解析值的顺序?

Barbara Streisand
Barbara Streisand原创
2024-11-03 00:22:29575浏览

Does `Promise.all` Preserve the Order of Resolved Values?

Promise.all:解析值的顺序

在 JavaScript 中,Promise.all 旨在通过允许解析来增强 Promise 的功能同时执行多个承诺。 Promise.all 的一个关键方面是将解析值传递给其回调的顺序。

根据 MDN 文档,解析值的顺序应与输入数组中 Promise 的顺序相对应。这意味着第一个要解析的 Promise 的值将首先放置在传递给 then() 回调的结果数组中。

为了确认这一点,让我们深入研究 JavaScript Promise 规范。在“Promise.all(可迭代)”部分中,我们找到了将可迭代的 Promise 解析为单个 Promise 的步骤。关键细节在于步骤 4e,其中涉及为每个已解决的 Promise 创建一个内部 [[Index]] 槽。该槽显式标记了原始输入数组中 Promise 的索引。

因此,Promise.all 实现确保在同时解析多个 Promise 时,输出严格根据输入中 Promise 的顺序排序大批。只要输入数组保持一致的排序(例如数组),这种顺序保留就成立。

为了说明这一点,请考虑以下代码:

<code class="js">const somePromises = [1, 2, 3, 4, 5].map(Promise.resolve);
Promise.all(somePromises).then(function(results) {
  console.log(results); // Expected result: [1, 2, 3, 4, 5]
});</code>

当此代码时执行后,解析的值将按照 somePromises 数组中的 Promise 的顺序记录到控制台。这演示了 Promise.all 的订单保存功能。

以上是`Promise.all` 是否保留解析值的顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn