Javascript JS async/await:调用方中的catch而不是try/catch?

Javascript JS async/await:调用方中的catch而不是try/catch?,javascript,async-await,Javascript,Async Await,Async/await无疑使我的代码更干净、更枯燥。当涉及到错误处理时,我不确定最佳实践。我发现的大多数示例在async函数中都有try/catch。如果调用方有一个.catch(),您必须要有它吗?与下面的示例1相比,示例2的优势是什么 示例1在异步函数中不使用try/catch: function addReminder(data) { /*do some stuff*/ saveReminder(data) .then(/*do some stuff*/ .catc

Async/await无疑使我的代码更干净、更枯燥。当涉及到错误处理时,我不确定最佳实践。我发现的大多数示例在
async
函数中都有
try
/
catch
。如果调用方有一个
.catch()
,您必须要有它吗?与下面的示例1相比,示例2的优势是什么

示例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 */
}
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);
  }
}
示例2在异步函数中使用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 */
}
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);
  }
}

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

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