【问题标题】:Using a .catch instead of try/catch block使用 .catch 代替 try/catch 块
【发布时间】:2019-12-04 08:15:11
【问题描述】:

在发送如下请求时,而不是使用传统的try/catch 来处理错误

let body;
try {
    const response = await sendRequest(
        "POST",
        "/api/AccountApi/RefundGetStatus",
        JSON.stringify(refundParams),
        undefined,
        headers
    );
    body = response.body;
} catch (error) {
    log("error", "An error occurred sending a request", { error });
    throw createError("An error has occurred", DefaultErrors.API_ERROR);
}

我在想是否可以像下面这样重写错误处理来获得相同的结果。

const response = await sendRequest(
    "POST",
    "/api/AccountApi/RefundGetStatus",
    JSON.stringify(refundParams),
    undefined,
    headers
).catch((err: any) => {
    log("error", "An error occurred sending a request", { err });
    throw createError("An error has occurred", DefaultErrors.API_ERROR);
});

上面的代码块是否能够处理未定义的错误以及JSON.parse 错误?

【问题讨论】:

  • 不,这不是错误捕获的工作原理。

标签: javascript typescript error-handling


【解决方案1】:

你可以同时使用

try { 
  await sendRequest()
} catch (err) {
  // do something
}

sendRequest().catch(err => { // do something})

捕捉错误。

下面是一个简单的例子,你可以粘贴到typescript playgound试试看。

const sendRequest = (str: string) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('get response');
      reject('error message');
    }, 2000)
  })
}

const test1 = async ()=> {
  try{
    await sendRequest('data');
  } catch (err) {
    // will print 'err===> error message'
    console.log('err===>', err)
  }
}

const test2 = async ()=> {
  sendRequest('data').catch(err => {
    // will print 'err===> error message'
    console.log('err=====>', err)
  })
}

test1();
test2();

test1() 和 test2() 都会捕获错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-02
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多