Promise.all:解析值的顺序

2024-04-22

看着MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all它看起来像values传递给then()Promise.all 的回调包含按照 Promise 顺序排列的值。例如:

var somePromises = [1, 2, 3, 4, 5].map(Promise.resolve);
return Promise.all(somePromises).then(function(results) {
  console.log(results) //  is [1, 2, 3, 4, 5] the guaranteed result?
});

任何人都可以引用说明顺序的规范values应该在?

PS:运行这样的代码表明这似乎是正确的,尽管这当然没有证据 - 这可能是巧合。


不久,订单被保留 https://www.karltarvas.com/2015/01/21/order-of-resolved-values-in-promise-all.html.

按照您链接到的规范,Promise.all(iterable) https://tc39.es/ecma262/#sec-promise.all需要一个iterable https://tc39.es/ecma262/#sec-iterator-interface作为参数并内部调用PerformPromiseAll(iterator, constructor, resultCapability) https://tc39.es/ecma262/#sec-performpromiseall与它一起,后者循环iterable using IteratorStep(iterator) https://tc39.es/ecma262/#sec-iteratorstep.

解决是通过实现Promise.all() Resolve https://tc39.es/ecma262/#sec-promise.all-resolve-element-functions每个已解决的承诺都有一个内部[[Index]]slot,它标记原始输入中promise的索引。


所有这些意味着输出是严格排序的,因为您传递给 Promise.all() 的可迭代对象是严格排序的(例如,数组)。

您可以在下面的小提琴(ES6)中看到它的实际效果:

// Used to display results
const write = msg => {
  document.body.appendChild(document.createElement('div')).innerHTML = msg;
};

// Different speed async operations
const slow = new Promise(resolve => {
  setTimeout(resolve, 200, 'slow');
});
const instant = 'instant';
const quick = new Promise(resolve => {
  setTimeout(resolve, 50, 'quick');
});

// The order is preserved regardless of what resolved first
Promise.all([slow, instant, quick]).then(responses => {
  responses.map(response => write(response));
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Promise.all:解析值的顺序 的相关文章

随机推荐

  • Oracle 内联视图

    为什么使用内联视图 使用内联视图有许多不同的原因 有些事情没有内联视图就无法完成 例如 1 对解析函数的结果进行过滤 select ename from select ename rank over order by sal desc rn
  • 检查我的 SSRS 报告,代码中是否为空

    我正在加载我使用 SSRS 通过代码 C 完成的报告 但我需要检查报告是否为空 我怎样才能得到它 我使用的代码是 if string IsNullOrEmpty RptInstance FileName string ReportName
  • Javascript 将 URL 转换为 BASE64 图像

    我正在构建一个 Ionic2 应用程序 我正在尝试将图像 url 转换为 base64 图像 我已经发现this https stackoverflow com questions 22172604 convert image url to
  • iTextSharp 可以将 PDF 文档转换为 PDF/A

    我无法在常见问题解答中找到此功能是否存在于 API 中 尽管在一本书中提到它是可能可用的 有人有实施此功能的经验吗 On 这个线程 http old nabble com Added support for PDF A 1 td109714
  • 在 SQL Server 中的韩语单词(任何 Unicode 单词)中查找韩语字母表(任何 Unicode 字符)的索引

    我需要按姓名搜索人员 这里的人名可以是英文 韩文或中文 为此我使用了Like搜索条件Name如下 select from MyTable where Name like N t 上述声明是给所有包含字母的用户t 但这不适用于韩语或中文 就像
  • chrome扩展后台页面中的jQuery使用

    Goal 我正在尝试使用此样板代码使用在线词典 API 进行查找 以查找所选单词并返回定义 Problem 我已经单独测试了实际的 jQuery ajax 调用 效果很好 另外 我可以在页面上获取所选的单词 然而 由于某种原因 我实际上遇到
  • 从无符号除法结果分配时有关符号转换的警告

    我编译了以下代码 Wsign conversion int main unsigned int a 8 int b a 8u warning implicit conversion changes signedness unsigned i
  • 如何防止“CoreData无法完成故障”?

    我们偶尔会收到 CoreData 无法完成故障 的信息 我们已阅读 Apple 文档 但不清楚允许保留哪些内容 我们非常小心地为每个线程创建一个上下文等 但是 我们的应用程序正在做的一件事是我们在 UIViewController 上保留
  • PHP 空 $_POST

    我通过 HTTP POST 向 PHP 发送数据 这对于短于 8MB 8192KB 的数据来说效果很好 但是当发送的数据量更大时 PHP 会显示 POST变量为空 我强调的是 POST变量甚至不包含帖子字段的名称 它作为空数组存在 临界点似
  • Python RuntimeError:字典在迭代期间更改了大小[重复]

    这个问题在这里已经有答案了 我正在练习一个非常简单的Python代码 我试图找到它的解决方案 但找不到 def del contacts for name number in d1 items if del name name del d1
  • 查找两个数组中的重复值,Python

    我有两个数组 A 和 B 每个数组约有 50 000 个值 每个值代表一个 ID 我想创建一个包含三列的 pandas 数据框 col1 数组 A 中的值 col2 数组 B 中的值 col3 带有标签 唯一 或 重复 的字符串 在每个数组
  • Process.Start 返回 null 时查找进程 ID?

    如果我尝试通过调用打开图像文件 视频或网站Process Start filepath 直接 那么它通常会成功 但是 Process Start 的返回值有时将为 null 正如这里所讨论的 https stackoverflow com
  • 将硬编码文件路径更改为 VBA 中提示的用户?

    现在 我有一个用于 Word 的 VBA 宏 它可以解析文档中的某种字体 并将所选类型的所有字体输出到文本文件 我打开文本文件的硬编码行是这样的 Open C Documents and Settings Output txt For Ou
  • 实现共享功能的标准方法

    我需要在 iOS 中实现 共享为 功能 例如 一个按钮名为 共享为 并弹出一个对话框 其中包括电子邮件 短信 Facebook Twitter 等项目 我想知道是否有一个标准对话框可以完成这项工作 经过搜索 我发现在 iOS6 中使用 UI
  • 如何使用 C 客户端通过 ActiveMQ 启用 SSL

    我已经配置了 ActiveMQ http activemq apache org http activemq apache org 通过以下方式使用 ssl 上下文RedHat 的 SSL TLS 教程 https access redha
  • HTML 树全宽悬停效果

    我有一个 html 树 主要由嵌套的无序列表组成 我需要为每个叶子创建全宽悬停效果 类似于 Windows 文件菜单树悬停效果 悬停效果是 div div 具有背景颜色和边框 我做了一个模拟全宽度的黑客 但侧面边框不再可见 我可以使用 CS
  • C++/CLI:CA2123:需要 SecurityCriticalAttribute?

    我对这样的错误有点迷失 警告 7 CA2123 Microsoft Security 添加以下安全属性 到 RithmicConnector 连接 字符串 为了匹配基地的 LinkDemand 方法 IConnector Connect S
  • 如何向 Monaco 编辑器添加新的语言语法?

    我添加了我的语言并按照此处的说明进行构建https github com Microsoft monaco languages https github com Microsoft monaco languages npm run prep
  • 选择日期最高的行

    我的表中有一些重复的值 我只想选择那些具有最新 最高日期的值 即 ID Type Name Value Date 1 FRUIT APPLE Imported 2011 03 19 22 08 13 5 FRUIT LEMON Import
  • Promise.all:解析值的顺序

    看着MDN https developer mozilla org en US docs Web JavaScript Reference Global Objects Promise all它看起来像values传递给then Promi