在下面的代码中,我试图尝试捕获。
尝试捕获功能:
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
。
怎么了?
答案 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'],
})
}