如何正确使用try / catch,promise catch和async函数?

时间:2018-04-30 16:25:23

标签: javascript async-await try-catch ecmascript-2017

这就是我的上传功能目前的样子。我正在使用apollo变异来上传文件。

我不明白如何正确使用try / catch并捕获promise(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 :(得分:2)

asyncawait必须携手使用 - 这意味着在不使用await关键字的情况下,不会自动“等待”任何内容。在您的示例中,您只是返回从client.mutate返回的Promise。

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

请记住,upload函数也会通​​过async返回Promise。所以调用代码应该适当地处理它。