为了账号安全,请及时绑定邮箱和手机立即绑定

尝试 Catch Not working with Promise 和 Redux Thunk

尝试 Catch Not working with Promise 和 Redux Thunk

猛跑小猪 2022-05-14 13:53:58
随意编辑标题,因为我不知道如何正确表达。我们正在使用React 6.13, Babel 7,Node 12好吧,我正在尝试重构我们的数千行代码,而我必须为重复代码做的一件事是创建一个try-catch-wrapper函数,因为我们对每个错误都做同样的事情。所以下面是包装函数:const tryToCatch = (func, data ,dispatch) => {   try {      func()      console.log('mmmm')   } catch (error) {      console.log('Error: ', error)      console.log(data)      return handleError(error, data , dispatch)   }}下面是我试图调用它的方式,我正在使用console.log(a)哪些打印:但它似乎从未进入CATCH,因为console.log('Error: ', error)并且 console.log(data)从未打印过。export const search = () => async dispatch =>   tryToCatch(      async () => {         //Get Games         const { data } = await serverApi('GET', '/api/common/games')         console.log(a) //a is undefined so it will try to catch error         console.log("hello");         ..etc code      },      dispatch,      { filtersLoading: false }   )
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

const tryToCatch = async (func, data ,dispatch) => { // Missing `async`

   try {

      await func()

      console.log('mmmm')

   } catch (error) {

      console.log('Error: ', error)

      console.log(data)

      return handleError(error, data , dispatch)

   }

}


查看完整回答
反对 回复 2022-05-14
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

回调函数是异步的,try-catch 只能同步工作。您可以将 tryToCatch 设为异步函数并在 func() 调用之前添加 await。


const tryToCatch = async (func, data ,dispatch) => {

   try {

      await func()

      console.log('mmmm')

   } catch (error) {

      console.log('Error: ', error)

      console.log(data)

      return handleError(error, data , dispatch)

   }

}

参考:https ://javascript.info/try-catch


查看完整回答
反对 回复 2022-05-14
  • 2 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信