我有这个代码
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/