为什么返回错误在try-catch中不起作用? (JavaScript)

时间:2019-07-09 02:16:21

标签: javascript

在下面的代码中,我试图尝试捕获。

尝试捕获功能:

const updateReturnInformation = async () => {
if (state.isLoading) {
  throw new Error('Errrrrror!!!') // <- It is success working
}

dispatch(actionSetLoading(true))
try {
  await updateReturnAPI(...)
} catch (ex) {
  return ex // <- why not working?
} finally {
  dispatch(actionSetLoading(false))
}
}

然后,我在另一个组件中调用了此函数:

...
try {
  await updateReturnInformation()
  navigation.navigate(Routes.Root.Modal.Confirm, {
    title: 'success!',
    buttons: ['OK'],
  })
} catch (ex) {
  navigation.navigate(Routes.Root.Modal.Confirm, {
    heading: 'Error',
    title: ex,
    buttons: ['OK'],
  })
}
...

我叫updateReturnInformation(),但是它只能打印“成功!”。消息。

此外,console.log仍将仅显示“成功!”。错误消息。

return error的updateReturnInformation()更改为throw error很好,但是我只需要使用return error

怎么了?

2 个答案:

答案 0 :(得分:2)

catch()方法返回一个Promise并仅处理被拒绝的案件。尝试使用reject(error),您将可以捕获该错误。

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch

答案 1 :(得分:1)

如果必须使用return ex,则必须在调用方而不是catch中使用返回值。

let ex = await updateReturnInformation()
if (ex) {
  navigation.navigate(Routes.Root.Modal.Confirm, {
    heading: 'Error',
    title: ex,
    buttons: ['OK'],
  })
} else {
  navigation.navigate(Routes.Root.Modal.Confirm, {
    title: 'success!',
    buttons: ['OK'],
  })
}