首页 > 解决方案 > 如何正确使用 try/catch、promise catch 和 async 函数?

问题描述

这就是我的上传功能目前的样子。我正在使用阿波罗突变来上传文件。

我不明白如何正确使用 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')
  }
}

标签: javascriptasync-awaittry-catchecmascript-2017

解决方案


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函数也通过 being 返回一个 Promise async。所以调用代码应该适当地处理它。


推荐阅读