尝试 Catch Not working with Promise 和 Redux Thunk

随意编辑标题,因为我不知道如何正确表达。


我们正在使用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)哪些打印:

http://img2.mukewang.com/627f440e00019bb506950105.jpg

但它似乎从未进入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 }

   )


猛跑小猪
浏览 95回答 2
2回答

慕森卡

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)   }}

繁星淼淼

回调函数是异步的,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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript