2017-11-25 64 views
0

我是一个redux初学者。我正在使用redux-thunk,但是,我只是从这个函数得到错误。操作必须是普通对象。使用自定义中间件进行异步操作。还原thunk相关

Error: Actions must be plain objects. Use custom middleware for async actions. 
this.props.sendPaypalOrderToFirebase(body) 



export const sendPaypalOrderToFirebase = (orderInfo) => { 
    async (dispatch, getState) => { 
    database.ref('paypalOrders/' + uuid()).set({ 
     orderInfo 
    }); 
    return dispatch(paypalOrderFirebaseSuccess(orderInfo)) 
    } 
} 

export const createOrder = (paymentMethod, paymentData) => ({ 
    type: actionTypes.CREATE_ORDER, 
    paymentMethod, 
    paymentData 
}); 
export const paypalOrderFirebaseSuccess = (orderInfo) => ({ 
    type: actionTypes.PAYPAL_ORDER_FIREBASE_SUCCESS, 
    orderInfo 
}) 

感谢您的帮助。

+0

异步返回承诺。如果你没有足够的理由使用异步只是返回函数。在该函数中,您执行异步操作,然后调度该操作。这里的问题是你没有返回一个函数 – stack26

回答

0

这里的问题是你的async使用:

export const sendPaypalOrderToFirebase = (orderInfo) => { 
    async (dispatch, getState) => { 
    // ... 
    } 
} 

什么这个片段实际上做的是创造一个异步箭头的功能,因为它没有从行动的创建者返回不会被调用(调用此动作创建者将只返回undefined)。

修复它可以通过以下方式实现:

  1. 添加在return

    export const sendPaypalOrderToFirebase = (orderInfo) => { 
        return async (dispatch, getState) => { 
        // ... 
        } 
    } 
    
  2. 或删除一些括号:

    export const sendPaypalOrderToFirebase = (orderInfo) => async (dispatch, getState) => { 
        // ... 
    } 
    

最后,它是值得考虑如果您实际上完全需要async功能,因为您似乎没有在thunk块中创建Promise(或至少await ing)。

相关问题