JS async / await: ловить в вызывающей стороне вместо try / catch? - PullRequest
0 голосов
/ 08 сентября 2018

Async / await определенно сделал мой код чище и более сухим. Я не уверен в лучших практиках, когда дело доходит до обработки ошибок. Большинство примеров, которые я обнаружил, имеют try / catch в функции async. Вы должны иметь это, если у звонящего есть .catch()? В чем преимущество примера 2 перед примером 1 ниже?

Example1 без 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 с 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);
  }
}

1 Ответ

0 голосов
/ 08 сентября 2018

Чтобы перехватить исключение из асинхронной функции, необходимо дождаться вызова. Таким образом, если вы не ожидаете этого, у вас есть только опция, как в примере 1. Однако, если она ожидается, вы можете использовать любую из этих опций.

В примере 2 у вас есть дополнительное преимущество, заключающееся в том, что, если вы получите точное местоположение, где произошла ошибка, может быть полезно зарегистрировать ее, прежде чем выдать ошибку. Перехват в конце обещания, как в вашем коде после функции saveReminder, перехватит любое необработанное исключение, неважно, в какой цепочке обещаний оно произошло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...