在异步函数中抛出的错误被捕获
Error being thrown within async function gets caught
我想使用异步函数而不是返回承诺,但是要拒绝我需要抛出这样的错误:
async function asyncOperation() {
throw new Error("Terminate this application.");
}
(async () => {
try {
await asyncOperation();
} catch (e) {
console.error(e);
}
console.log("Nope, I am still running!"); // This will be printed regardless
})();
这意味着要捕获拒绝,我必须将函数调用放在 try 语句中。通过这样做,我没有终止应用程序,而是捕获了错误,然后我可以继续。
这当然可以像您期望的那样工作,但是我想抛出一个错误来实际终止应用程序,无论该函数是否在 try 语句中被调用。
如何在不检查 catch 语句中的错误的情况下实现这一点?
I want to throw an error to actually terminate the application
没有。抛出异常只是为了能够捕获并处理它们。如果你真的想无论如何终止你的应用程序(这将是一个糟糕的、不可测试的设计),你只需调用 process.exit()
并完成它。
I might have other errors that I do want to catch.
听起来你真正想要的是处理一些抛出的错误,但让那些未处理的错误像往常一样终止应用程序——除非在链中被捕获并进一步处理。为此,您需要有条件地重新抛出异常:
try {
…
throw Object.assign(new Error("…"), {reason: X});
…
} catch (e) {
if (e.reason == Y)
console.error(e);
else
throw e;
}
console.log("I won't run after X errors!");
请注意,其中 none 实际上与 async
/await
有关。
我想使用异步函数而不是返回承诺,但是要拒绝我需要抛出这样的错误:
async function asyncOperation() {
throw new Error("Terminate this application.");
}
(async () => {
try {
await asyncOperation();
} catch (e) {
console.error(e);
}
console.log("Nope, I am still running!"); // This will be printed regardless
})();
这意味着要捕获拒绝,我必须将函数调用放在 try 语句中。通过这样做,我没有终止应用程序,而是捕获了错误,然后我可以继续。
这当然可以像您期望的那样工作,但是我想抛出一个错误来实际终止应用程序,无论该函数是否在 try 语句中被调用。
如何在不检查 catch 语句中的错误的情况下实现这一点?
I want to throw an error to actually terminate the application
没有。抛出异常只是为了能够捕获并处理它们。如果你真的想无论如何终止你的应用程序(这将是一个糟糕的、不可测试的设计),你只需调用 process.exit()
并完成它。
I might have other errors that I do want to catch.
听起来你真正想要的是处理一些抛出的错误,但让那些未处理的错误像往常一样终止应用程序——除非在链中被捕获并进一步处理。为此,您需要有条件地重新抛出异常:
try {
…
throw Object.assign(new Error("…"), {reason: X});
…
} catch (e) {
if (e.reason == Y)
console.error(e);
else
throw e;
}
console.log("I won't run after X errors!");
请注意,其中 none 实际上与 async
/await
有关。