当我编写 NPM 包时,我需要一个
try{}catch{}
语句,但错误有时会超出 try{}
部分并终止整个过程。
由于
try{}catch{}
用于捕获来自 try{}
部分的错误并使用 catch{}
部分处理它们,我预计错误将被捕获并传递给 catch{}
,但是当函数使用 return
返回错误时
,不是throw
语句,错误爆发。我尝试了不同的调用方法,例如.call(...)
或.apply(...)
,但问题仍然存在。
这通过了:
let result;
let throwError = () => throw new Error("I didn't break out!");
try {
let res = throwError();
result = res;
} catch(err) {
result = {
message: err.message,
name: err.name
}
}
result; // {name: "Error", message: "I didn't break out!"}
这失败了:
let result;
let returnError = () => new Error("I broke out!")
try {
let res = returnError(); // Error: I broke out!
result = res;
} catch(err) {
result = {
message: err.message,
name: err.name
}
}
这里没有问题。如果你想捕获抛出的错误,
try/catch
就能做到。如果您想捕获返回的错误,则需要进行不同的检查。
let result;
let returnError = () => new Error("I broke out!")
try {
let res = returnError();
if (res instanceof Error) {
throw res;
}
result = res;
} catch(err) {
result = {
message: err.message,
name: err.name
}
}