调用后检查错误 Promise.allSettled

Inspecting Errors after calling Promise.allSettled

在我的代码中,我尝试并行分派作业(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}`);    
  }
});

您不需要 await map() returns 的数组(它不会做任何事情 - 您只能 await Promise.allSettled() returns),你会想要 updateActor() returns 这样拒绝就会被 try/catch块。