2 回答
TA贡献1876条经验 获得超7个赞
你在这里有两个问题:
您的
forEach
循环saveResultsToFiles
不会返回任何内容,因此您无法让代码的其他部分“等待”每个项目的承诺解决。saveResultFile
返回一个承诺,但这个承诺不在await
你的try
块中。
这两个问题的结果是该块仅“开始”保存到文件的过程,但在屈服于该块try
之前不等待它完成。finally
以下是您可以尝试的解决方案。
您需要能够进行
await
每个saveResultFile
调用,为此您需要访问在saveResultsToFiles
. 实际上,.map
您将获得一系列结果(而不是.forEach
):
const saveResultsToFiles = (results) => {
return results.map(result => saveResultFile(result));
}
现在它saveResultsToFiles实际上返回了一组承诺,你应该await在继续之前将它们全部返回。这正是Promise.all为了:
try {
const results = await heavyCalculation();
await Promise.all(saveResultsToFiles(results));
}
TA贡献1802条经验 获得超4个赞
你没有在等待saveResultsToFiles(results);
尝试:
(async () => {
try {
const results = await heavyCalculation();
saveResultsToFiles(results);
} catch (e) {
handleError(e);
} finally {
process.exit(0);
}
})();
const saveResultsToFiles = async (results) => {
results.forEach(result => {
await saveResultFile(result);
})
}
const saveResultFile = (result) => {
return promiseToPreprocess(result)
.then(processedResult => saveToFile(processedResult))
}
const promiseToPreprocess = async (result) => {
// this function returns a promise to preprocess the data
}
const saveToFile = (data) => {
// this function synchronously saves data to a file
}
添加回答
举报