调用promise . allsettle后检查错误



在我的代码中,我试图并行调度作业(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;
} 

我应该遵循的正确模式是什么?

我想你是在找

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}`);    
}
});

你不需要awaitmap()返回的数组(它不会做任何事情-你只能awaitPromise.allSettled()返回的承诺),你想要awaitupdateActor()返回的承诺,这样拒绝将被try/catch块捕获。

相关内容

  • 没有找到相关文章

最新更新