【问题标题】:async/await Promise.all() but get response as the promises resolveasync/await Promise.all() 但在承诺解决时得到响应
【发布时间】:2019-08-28 05:55:52
【问题描述】:

使用 Promise.all() 并行运行所有 Promise,但在每个 Promise 解析时获取响应并对其进行处理。

是否有一种解决方法,比如我可以将回调附加到 promises.resolve,当某个承诺解决时,它会调用回调

例子

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

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

function processData(data)
{
.... 
}

我想并行运行所有这些,但不想等到所有这些都得到解决,而是在每个 Promise 解决后立即调用 processData()

【问题讨论】:

    标签: javascript promise


    【解决方案1】:

    使用forEach 迭代promise,将processData 附加到.then 中的每个promise:

    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 */
      })
    );

    【讨论】:

      【解决方案2】:

      您可以在解析后附加.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])
      

      【讨论】:

        【解决方案3】:

        只是不要使用Promise.all()

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

        如果您需要在承诺解决后立即调用processData,但希望等待所有承诺解决后再继续,则仅在等待时使用Promise.all(),但在每个承诺的.then() 中调用processData

        (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..
        
        })();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-20
          • 1970-01-01
          • 2020-09-03
          • 2023-01-21
          • 2021-12-20
          • 1970-01-01
          相关资源
          最近更新 更多