在我的代碼中,我試圖并行調度作業(FoundryVTT 資料物件遷移),并在途中捕獲任何錯誤。
在他們全部完成課程后,我正在嘗試一起列印錯誤詳細資訊。問題是單個演員的錯誤沒有被“抓住”,但我可以看到最后被拒絕的承諾。這是我的代碼:
const actorMigrations = await game.actors.contents.map((actor) => {
try {
return this.updateActor(actor);
} catch (err) {
throw new Error(`${actor.name} had a migration error: ${err.message}`);
}
});
const values = await Promise.allSettled(actorMigrations);
for (const value of values.filter((v) => v.status !== "fulfilled")) {
LOGGER.error(`Migration error: ${value.reason.message}`);
LOGGER.error(value.reason.stack);
return false;
}
我應該在這里遵循什么正確的模式?
uj5u.com熱心網友回復:
我想你正在尋找
const actorMigrations = game.actors.contents.map((actor) => {
// ^
try {
return await this.updateActor(actor);
// ^^^^^
} catch (err) {
throw new Error(`${actor.name} had a migration error: ${err.message}`);
}
});
您不需要回傳await的陣列map()(它不會做任何事情 - 您只能回傳回傳await的承諾Promise.allSettled()),并且您需要回傳await的承諾,updateActor()以便try/catch塊捕獲拒絕。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/462483.html
標籤:javascript es6-承诺
上一篇:一次更新多個檔案
