Как правильно использовать функции try / catch, обещание catch и async? - PullRequest
0 голосов
/ 30 апреля 2018

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

Я не понимаю, как правильно использовать try / catch и catch для обещания (которым является 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 Ответ

0 голосов
/ 30 апреля 2018

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. Поэтому вызывающий код должен обрабатывать его соответствующим образом.

...