简体   繁体   English

async / await Promise.all(),但是在promise解析时得到响应

[英]async/await Promise.all() but get response as the promises resolve

Run all promises in parallel using Promise.all() but get response of each promise as it resolves and do processing on that. 使用Promise.all()并行运行所有promise,但在其解析并进行处理时获得每个promise的响应。

Is there a work around like I can attach a callback to promises.resolve that as a certain promise resolves it calls a callback 是否有解决方法,例如我可以将回调附加到promises.resolve ,当某个promise解决后,它将调用回调

Example

let p1 = Promise.resolve(1)
let p2 = Promise.resolve(2)
let p3 = Promise.resolve(3)

Promise.all([p1,p2,p3])

function processData(data)
{
.... 
}

I want to run all of them in parallel but don't want to wait till all of them get resolved but instead call processData() as soon as a promise resolves for each of them. 我想并行运行所有它们,但是不想等到所有它们都解决后,而是在一个promise为每个它们解决后立即调用processData()

Iterate over the promises with forEach instead, attaching processData to each in a .then : 遍历与承诺forEach相反,安装processData的每一个.then

 const processData = console.log; let p1 = Promise.resolve(1); let p2 = Promise.resolve(2); let p3 = Promise.resolve(3); [p1, p2, p3].forEach(prom => prom .then(processData) .catch((err) => { /* handle errors */ }) ); 

You can attach a .then after resolving and assign processData as a callback. 您可以在解析后附加.then ,然后将processData分配为回调。

let p1 = Promise.resolve(1).then(processData);
let p2 = Promise.resolve(1).then(processData);
let p3 = Promise.resolve(1).then(processData);

Promise.all([p1,p2,p3])

Just don't use Promise.all() : 只是不要使用Promise.all()

let p1 = Promise.resolve(1).then(processData);
let p2 = Promise.resolve(2).then(processData);
let p3 = Promise.resolve(3).then(processData);

If you need to call processData as soon as a promise resolves but want to wait for all promises to resolve before continuing then use Promise.all() only for the wait but call processData inside each promise's .then() : 如果您需要调用processData ,一旦承诺解决,但要等待所有承诺继续再使用之前解决Promise.all()只为等待,但调用processData的每个承诺的内侧.then()

(async () {
  let p1 = Promise.resolve(1).then(processData);
  let p2 = Promise.resolve(2).then(processData);
  let p3 = Promise.resolve(3).then(processData);

  await Promise.all([p1,p2,p3]);

  // continue processing..

})();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM