【发布时间】:2022-12-12 02:55:09
【问题描述】:
我有这样的东西用 nodejs 写的
const someOtherOperation = async (message) => {
try {
await doSomeIoOperation(message);
} catch (err) {
something
throw Error("Error doing someOtherOperation");
} finally {
await someCleanup();
}
}
const someOperation = async (message) => {
// something else
await someOtherOperation(message);
// something else
}
const main = async () => {
let messagePromises = []
let messages = await getMessages(); // fetching message from a message broker
for (let message of messages) {
messagePromises.push({ id: message.id, promise: someOperation(message) });
}
for (let messagePromise of messagePromises) {
try {
await messagePromise.promise;
} catch (err) {
console.log(err);
}
}
}
预期的行为是带有 try catch 的 for 循环不应该结束,即使其中一个承诺有错误。 发生的事情是当我在 someotherOperation 方法中遇到错误时我的进程突然结束,我不明白我在主循环中有一个 try catch 并且从最内层函数传播的任何错误都应该在主函数的 for 循环中被捕获但是它没有以某种方式被捕获并且该功能突然结束
【问题讨论】:
-
添加 process.on("unhandledRejection") 的更新因上述代码而被解雇我不明白的是我的哪些承诺在这里未处理我已经特别注意处理所有承诺
标签: node.js async-await es6-promise