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