2017-11-25 98 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)。

相關問題