首页 > web前端 > js教程 > `Promise.all()` 是否保留解析值的顺序?

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

DDD
发布: 2024-11-04 05:22:29
原创
988 人浏览过

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

Promise.all:保留解析值的顺序

Promise.all() 方法接受一个 iterable 作为其参数并返回一个新的一旦 iterable 中的所有承诺都解决了,承诺就会解决。问题出现了:解析值的顺序是否保证与可迭代中 Promise 的顺序匹配?

根据 MDN 文档,解析值应该按照 Promise 的顺序出现。然而,对这种特定行为的直接引用在规范中并没有立即显现出来。

深入研究规范,我们发现 PerformPromiseAll() 是通过传递给 Promise.all() 的可迭代对象来调用的。 PerformPromiseAll() 然后使用 IteratorStep() 迭代可迭代对象,这保证了 Promise 的顺序。

此外,每个已解析的 Promise 都有一个内部 [[Index]] 槽,表示其在原始输入可迭代对象中的索引。该槽在解析过程中使用,以确保输出数组保持原始顺序。

综上所述,只要输入,Promise.all() 中解析值的顺序就会被严格保留iterable 是有序的。以下代码片段对此进行了示例:

<code class="js">const slow = new Promise(resolve => setTimeout(resolve, 200, 'slow'));
const instant = 'instant';
const quick = new Promise(resolve => setTimeout(resolve, 50, 'quick'));

Promise.all([slow, instant, quick]).then(responses => {
  responses.map(response => console.log(response));
});

// Output: [ 'instant', 'quick', 'slow' ]</code>
登录后复制

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

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