错误:操作必须是普通对象。使用自定义中间件进行异步操作。

时间:2017-09-15 15:32:12

标签: reactjs firebase asynchronous redux redux-thunk

我目前正在使用reactjs使用react -s,redux,thunk和firebase以及其他技术。不幸的是,当我发送异步操作时,我收到以下错误。

我经历了stackoverflow建议的所有类似问题但仍无法找到问题。

任何帮助都将不胜感激。

错误:

  

app.js:54628错误:操作必须是普通对象。使用自定义中间件进行异步操作。       在派遣(app.js:31576)       在Object.fetchBase(app.js:32220)       at Object.next(app.js:63640)       在app.js:54507       在app.js:54622       在

的package.json

...
"react-router-dom": "^4.1.1",
"react-router-redux": "^4.0.8",
"redux-thunk": "^2.2.0",
"redux": "^3.7.1",
...

store.js

import { createStore, applyMiddleware, compose } from 'redux';
import reduxThunk from 'redux-thunk';
import { routerMiddleware } from 'react-router-redux';
import { browserHistory } from 'react-router-dom';

// Import the root reducer
import allReducers from './reducers';

// import default data
import config from './data/config';

const defaultState = {
  events: [],
  config,
  activeGame: null,
  basePath: '',
};

const router = routerMiddleware(browserHistory);
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(allReducers, defaultState,
  composeEnhancers(applyMiddleware(reduxThunk, router)));

export default store;

Actions.js

...
export const fetchBase = () => {
  const organizationRef = database.ref(`users/${auth.currentUser.uid}/organization`);
  return dispatch => {
    organizationRef.once('value', snapshot => {
      dispatch({
        type: ActionTypes.FETCH_BASE,
        payload: snapshot.val()
      });
    });
  };
}; // fetchBase
...

4 个答案:

答案 0 :(得分:0)

我认为organizationRef.once会返回firebase.Promise,这就是您收到错误的原因。

答案 1 :(得分:0)

您的动作创建者看起来相当不错,但尝试将ref发送到firebase数据库,如下所示:

firebase.database().ref(`/users/${uid}/employees`)

答案 2 :(得分:0)

你的动作创作者看起来很好。错误消息表明您没有正确注册redux-thunk中间件。

尝试按以下方式导入:

import thunk from 'redux-thunk';

然后将其应用于

const store = createStore(allReducers, defaultState,
   composeEnhancers(applyMiddleware(thunk, router)));

来自:redux-thunk repo

答案 3 :(得分:0)

感谢大家的帮助。我确实发现了这个问题并且正在踢自己。上面的代码工作正常,问题是我在商店注册的地方。我正在导入一个我用于测试目的的辅助商店文件。一旦我更新了实体店,我忘了切换到它。