【问题标题】:JS async/await: catch in caller instead of try/catch?JS async/await:在调用者中捕获而不是尝试/捕获?
【发布时间】:2018-09-08 01:59:14
【问题描述】:

Async/await 确实让我的代码更简洁、更干。在错误处理方面,我不确定最佳实践。我发现的大多数示例在async 函数中都有一个try/catch。如果来电者有.catch(),你必须有吗?下面的 Example2 比 Example1 有什么优势?

示例1 没有异步函数中的try/catch:

function addReminder(data) {
  /*do some stuff*/
  saveReminder(data)
    .then(/*do some stuff*/
    .catch(error => console.log("Error saving reminder"));
}

async function saveReminder(data) {
  await AsyncStorage.setItem('reminders', JSON.stringify(data));
  /* do some stuff */
}

Example2 with try/catch 在异步函数中:

function addReminder(data) {
  /*do some stuff*/
  saveReminder(data)
    .then(/*do some stuff*/)
    .catch(error => console.log("Error saving reminder"));
}

async function saveReminder(data) {
  try {
    await AsyncStorage.setItem('reminders', JSON.stringify(data));
    /* do some stuff */
  } catch (error) {
    throw new Error(error);
  }
}

【问题讨论】:

    标签: javascript async-await


    【解决方案1】:

    要从异步函数中捕获异常,需要等待调用。因此,如果您不等待它,则只有示例 1 中的选项。但是,如果等待它,则可以使用任一选项。

    在示例 2 中,您还有一个额外的好处,即如果您获得了发生错误的确切位置,那么在引发错误之前记录它会很有用。在函数 saveReminder 之后的代码中的 promise 末尾捕获将捕获任何未处理的异常,无论它发生在哪个 promise 链中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多