2 回答
TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
你在這里有兩個(gè)問(wèn)題:
您的
forEach循環(huán)saveResultsToFiles不會(huì)返回任何內(nèi)容,因此您無(wú)法讓代碼的其他部分“等待”每個(gè)項(xiàng)目的承諾解決。saveResultFile返回一個(gè)承諾,但這個(gè)承諾不在await你的try塊中。
這兩個(gè)問(wèn)題的結(jié)果是該塊僅“開(kāi)始”保存到文件的過(guò)程,但在屈服于該塊try之前不等待它完成。finally
以下是您可以嘗試的解決方案。
您需要能夠進(jìn)行
await每個(gè)saveResultFile調(diào)用,為此您需要訪問(wèn)在saveResultsToFiles. 實(shí)際上,.map您將獲得一系列結(jié)果(而不是.forEach):
const saveResultsToFiles = (results) => {
return results.map(result => saveResultFile(result));
}
現(xiàn)在它saveResultsToFiles實(shí)際上返回了一組承諾,你應(yīng)該await在繼續(xù)之前將它們?nèi)糠祷亍_@正是Promise.all為了:
try {
const results = await heavyCalculation();
await Promise.all(saveResultsToFiles(results));
}
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
你沒(méi)有在等待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
}
添加回答
舉報(bào)
