Redux:动作必须是普通对象,对异步动作使用自定义中间件

时间:2019-10-12 23:58:04

标签: reactjs redux

我有一个看起来像这样的redux动作

export const authFacebook =  async () => {
console.log('Dispatching Facebook Auth')
return async (dispatch) => {
    dispatch({type: AUTH.AUTH_REQUEST})
    const initRequest = new NetworkRequest()
    try {
        const makeRequest = await initRequest.makeRequest('/auth/facebook')
        console.info('Facebook Auth Request', makeRequest)
            dispatch({
                type: AUTH.AUTH_FACEBOOK,
                payload: {
                    verifiedStatus: makeRequest.data.verifiedStatus || 3 // Email only verified is 3
                }
            })
    } catch (error) {
        console.error(error)
    }
}

AUTH.AUTH_FACEBOOK是字符串

export const AUTH = {
  AUTH_FACEBOOK: 'AUTH_FACEBOOK',
  LOGOUT: 'LOGOUT',
  AUTH_ERROR: 'AUTH_ERROR'
}

调度动作时,出现以下错误

  

index.delta:35439可能的未处理的承诺拒绝(id:0):错误:   动作必须是普通对象。使用自定义中间件进行异步   动作。错误:动作必须是普通对象。使用自定义中间件   进行异步操作。

即使在我的store.js中,我也在使用thunk

import {createStore, applyMiddleware, compose} from 'redux'
import thunk from 'redux-thunk'
import rootReducer from './reducers/rootReducer.r'

const middleware = [thunk]
const initialState = {}
const store = createStore(rootReducer, initialState, compose(applyMiddleware(...middleware)))

export default store

有人可以帮助我弄清楚我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

您不必将功能 authFacebook 定义为异步功能。 从第1行删除异步,它应该可以正常工作。