JS async / await:在调用者中捕获而不是try / catch?

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

Async / await确实使我的代码更清晰,更干。在错误处理方面,我不确定最佳实践。我发现的大多数例子都有try函数中的catch / async。如果来电者有.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 */
}

在async函数中使用try / catch的Example2:

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个回答
0
投票

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

在示例2中,您还有一个额外的好处,即如果您获得发生错误的确切位置,则在抛出错误之前记录它会很有用。函数saveReminder之后的代码中的promise的捕获将捕获任何未处理的异常,不再是它发生的哪个承诺链。

© www.soinside.com 2019 - 2024. All rights reserved.