JS,多方等待着一个承诺

时间:2018-08-02 10:38:36

标签: javascript asynchronous promise es6-promise

此代码会发送更多请求

 const pr1 = request1();
 const pr2 = request2();
 const pr3 = request3();

 await Promise.all([pr1, pr2, pr3])

 const res1 = await pr1
 const res2 = await pr2
 const res3 = await pr3

 const pr1 = request1();
 const pr2 = request2();
 const pr3 = request3();

 const [res1, res2, res3] = await Promise.all([pr1, pr2, pr3])

使用nodejs发送多个异步请求的最有效方法是什么?

4 个答案:

答案 0 :(得分:0)

有诺言:

var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});

使用异步/等待:

  

让[foo,bar] =等待Promise.all([getFoo(),getBar()]);

答案 1 :(得分:0)

  

此代码会发送更多请求

否。

它发送三个请求。

然后等待所有问题解决。

然后等待它们中的每一个都解决(因为他们已经解决,这不会花费时间)将它们分配给变量。

等待解决的问题并非从头开始。

  

使用nodejs发送多个异步请求的最有效方法是什么?

如果两个版本的代码在实际性能上存在差异,我会感到惊讶。

使用解构的第二个版本(主观上)更易于阅读。

为维护您的代码的人写信(通常在6个月的时间内成为您)。为他们提供易于维护的代码将比尝试进行微优化节省更多。

答案 2 :(得分:-1)

如果每个请求都独立于其他请求,则可以如上所述使用await Promise.all([])。但是,如果您需要上一个请求的结果,则需要等待每个请求。

const [res1, res2, res3] = await Promise.all([pr1, pr2, pr3])

答案 3 :(得分:-1)

const pr1 = request1();
const pr2 = request2();
const pr3 = request3();

const [res1, res2, res3] = await Promise.all([pr1, pr2, pr3])

这是最好的方法,它将触发3个并行请求,而不是顺序流。