javascript - 如何在继续之前等待所有 promise 被解决

标签 javascript async-await

我有这个代码

     async function concurrent() {
        await Promise.all([
            getColorCount('black'),
            getColorCount('purple'),
            getColorCount('red'),
            getColorCount('amber'),
            getColorCount('yellow'),
            getColorCount('white'),
            buildChartData()
        ]);

    }
    concurrent();
    res.json(chartData); //This is run before above promises are complete

我的理解是 async await 暂停代码直到完成,但在这种情况下,res.json(chartData) 在上述 promise 完成之前运行。

在使用 res.json(chartData); 响应客户端之前,我如何确保所有 promise 都已完成?

最佳答案

从函数返回一个值,或者在concurrent()函数调用中使用.then()

 function concurrent() {
   return Promise.all([
        getColorCount('black'),
        getColorCount('purple'),
        getColorCount('red'),
        getColorCount('amber'),
        getColorCount('yellow'),
        getColorCount('white'),
        buildChartData()
    ]);

  }
  concurrent()
  .then(chartData => 
    res.json(chartData)
  )
  .catch(err => console.error(err));

 async function concurrent() {
   const promises = await Promise.all([
        getColorCount('black'),
        getColorCount('purple'),
        getColorCount('red'),
        getColorCount('amber'),
        getColorCount('yellow'),
        getColorCount('white'),
        buildChartData()
    ]);
    return promises;
  }
  concurrent()
  .then(chartData => 
    res.json(chartData)
  )
  .catch(err => console.error(err));

关于javascript - 如何在继续之前等待所有 promise 被解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48470486/

相关文章:

javascript - 容器更改宽度后重新定位 Google map

Javascript:将json数据保存为服务器/用户硬盘上的文件

c# - 是否可以在非异步方法中调用可等待方法?

linux - 在 Unix 上的核心 CLR 中 P/调用和重叠 I/O?

javascript - 如何遍历类的每个实例并在函数中使用它?

javascript - 如何使用 Set 和 react 的 useState?

async-await - Web API - ConfigureAwait(true) 没有像我想的那样工作

c# - 垃圾收集异步方法

c# - 异步事件处理程序和并发

javascript - JS 表单验证的障碍