打破 try/catch 语句时出错

问题描述 投票:0回答:1

当我编写 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
  }
}
javascript node.js error-handling try-catch
1个回答
0
投票

这里没有问题。如果你想捕获抛出的错误,

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
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.