Как правильно использовать функции try/catch, обещание catch и async?

Вот так выглядит моя функция загрузки на данный момент. Я использую мутацию apollo для загрузки файла.

Я не понимаю, как использовать попробовать / поймать и поймать обещание (которое client.mutate() есть) правильно. Также я объявил функцию загрузки как async,

Так что, думаю, я кое-что перепутал:-(

Как правильно отлавливать ошибки?

Нужны ли оба улова? Разве я не должен заменить try/catch, если использую асинхронную функцию?

export default async function upload (client) {
  try {
    return client.mutate({
      mutation: uploadsMutation
    }).catch(err => {
      console.error(err)
    })
  } catch (error) {
    Alert.alert('Error', 'Could not upload files')
  }
}

1 ответ

Решение

async а также await должны использоваться рука об руку - это означает, что автоматически ничего не ожидается, не используя await ключевое слово. В вашем примере вы просто возвращаете обещание, возвращенное из client.mutate,

export default async function upload (client) {
  try {
    return await client.mutate({
      mutation: uploadsMutation
    });
  } catch (error) {
    Alert.alert('Error', 'Could not upload files')
  }
}

Имейте ввиду upload Функция также возвращает обещание, будучи async, Поэтому вызывающий код должен обрабатывать его соответствующим образом.

Другие вопросы по тегам