当前位置: 首页 > 面试题库 >

Promise.all:已解析值的顺序

关飞翼
2023-03-14
问题内容

查看MDN看起来像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:运行这样的代码表明这似乎是对的,尽管这当然没有证据-可能是巧合。


问题答案:

不久, 订单被保留

按照您链接到的规范,Promise.all(iterable)将一个iterable即支持该[Iterator接口的对象)作为参数,然后再调用PerformPromiseAll( iterator, constructor, resultCapability)它,后者iterable使用循环IteratorStep(iterator)
这意味着,如果Promise.all()严格传递您传递给的迭代器,则一旦传递,它们仍将被订购。

通过Promise.all()Resolve每个已解析的承诺都有一个内部[[Index]]插槽的位置来实现解析,该插槽在原始输入中标记承诺的索引。

所有这一切意味着,只要严格按照输入顺序对输出进行严格排序(例如,数组)。

您可以在下面的小提琴(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));

});


 类似资料:
  • 我正在尝试用Async/Await进行一些动态数据建模。我有两个endpoint,第一个将返回对象数组。数组中的这些实体具有从另一个endpoint获取的子实体。 所以我试图实现的结果类似于: 这就是我试图解决这个问题的方法: 我所期待的: 我得到的是: 我不知何故监督了我的承诺.所有链,所以我只是在我的数据对象中获得解析的承诺,有没有关于如何在其中获得普通数据的提示?或者如何将一个数组解析的承诺

  • 我对node.js比较熟悉,编写一个程序时需要承诺异步API调用。我有一个关于执行一些示例代码的问题,这是我在研究中偶然发现的。 下面的代码(根据我的理解)将访问一个API,等待响应,然后将该响应解析为承诺。这是迭代完成的,每个创建的承诺都被传递到一组承诺中。最终,对许诺数组调用promise.all()和.then(),将执行更多代码来迭代数组并将图像添加到页面中。 这里我不理解的是promis

  • 问题内容: 使用节点4.x。当您有什么正确的方法来解析数据并将其传递给下一个? 我想做这样的事情: 但是我不确定如何将数据发送到第二个。我不能先用。我知道我可以做到这一点: 但这似乎不是执行此操作的正确方法…正确的方法是什么? 问题答案: 但这似乎不是正确的方法。 确实,这是执行此操作的正确方法(或者至少 是 执行此操作 的 正确方法)。这是Promise的关键方面,它们是一个管道,数据可以由管道

  • 本文向大家介绍python方法解析顺序?相关面试题,主要包含被问及python方法解析顺序?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Python的方法解析顺序优先级从高到低为:实例本身类继承类(继承关系越近,越先定义,优先级越高)

  • 我对不同的API(由delayedPromise函数模拟)执行多个请求,每个请求都需要一定的时间才能完成。如果其中一个满足,我返回它解析的值,就这样。我现在一个接一个地做这些,因为第一个请求是最准确的,而第二个则不太准确,等等。因此,如果第一个请求失败,第二个满足,我将返回第二个请求 为了加快速度,我考虑将这些请求并行化。为了实现这一点,我正在创建一个数组,它持有promise,它等待第一个元素的

  • Demo 从日志输出来看 先执行了p1后执行p2, 问题 1.Promise.all的参数接受一个Promise数组, Promise数组中每一个Promise的执行函数的 开始执行顺序是怎样的? 是按照数组中的顺序 开始执行每一个Promise的执行函数吗?从实际日志输出来看 好像是数组的倒序 (注意问题问题的是Promise的执行函数的 开始执行顺序,并不是Promise的完成顺序,仅仅是执行