Redux 传奇接收功能而不是对象作为操作

Redux saga receives function not object as action

我正在将我的一些代码转换为使用 redux-saga(我以前只有 redux-thunk,但现在 运行 它们并排使用)并且使用了 this example as a basis.

我 运行 遇到的唯一问题是使用以下函数作为 takeEvery 的参数有时会按预期工作,但有时会中断,因为它接收的是函数而不是动作对象。

const requestAction = action => action.type.includes('REQUEST');

function* watchAuthenticationStatus() {
  yield takeEvery(requestAction, ensureAuthenticated);
}

从内部记录动作 requestAction 向我展示了很多时候我的动作如预期的那样作为对象出现,例如

{ type: "data/FETCH_REQUEST", data: Array(1) }

不过,我也看到了很多这样的事情:

ƒ (_x) {
  return _ref.apply(this, arguments);
}

ƒ (_x2, _x3) {
  return _ref3.apply(this, arguments);
}

我暂时通过检查 action.type 是否存在来解决这个问题,但是有人能解释为什么我有时会看到这些匿名函数吗?

编辑

按照下面的要求,我检查了我的中间件的顺序,我原来有:

const sagaMiddleware = createSagaMiddleware();

const store = createStore(
  rootReducer,
  composeEnhancers(applyMiddleware(sagaMiddleware, thunk))
);

sagaMiddleware.run(rootSaga);

重新排序 saga 和 thunk 解决了我的问题:

composeEnhancers(applyMiddleware(thunk, sagaMiddleware))

Re-ordering 中间件修复了这个问题,原来它是这样的:

composeEnhancers(applyMiddleware(sagaMiddleware, thunk))

首先放置 thunk 解决了问题:

composeEnhancers(applyMiddleware(thunk, sagaMiddleware))