首页 > 解决方案 > 将扩展运算符与 Promise.All() 一起使用会得到不同的结果,具体取决于哪个请求解决得更快?

问题描述

如果我有以下代码以不可靠的方式返回响应(即,您永远不确定哪个会更快完成),这会改变变量的分配吗?

例子:

const [response1, response2] = await Promise.all([request1, request2])

response1始终包含 的响应request1,或者是否有可能如果request2解析得更快,它会被分配给声明的第一个变量?为了代码示例,您可以假设它request1是对 APIrequest2的标准fetch()调用。

标签: javascriptecmascript-6

解决方案


将扩展运算符与 Promise.All() 一起使用会得到不同的结果,具体取决于哪个请求解决得更快?

No. Promise.all()收集所有结果,并按照您将 Promise 放入数组的顺序将所有结果呈现给您。 哪个请求先完成并不重要。

需要注意的是,如果有任何 Promise 被拒绝,那么Promise.all()将立即报告该拒绝,而无需等待其他 Promise。

如果我有以下代码以不可靠的方式返回响应(即,您永远不确定哪个会更快完成),那会改变变量的分配吗?

不会。它不会改变结果的顺序。 Promise.all()为您保留结果的顺序。这是它的特点之一。

response1始终包含响应request1

是的。

还是有可能如果request2解决得更快,它会被分配给声明的第一个变量?

不。


推荐阅读