Redux超时thunk错误“操作必须是普通对象”

时间:2016-10-13 00:35:33

标签: redux redux-thunk

我正在使用redux-thunk,我也想用超时调度一些动作。由于某些原因(我希望对象中的所有超时,我希望能够取消它们,现在并不重要)我想要自定义'超时中间件'和'动作增强'

enchancer只会发出特殊类型的动作:

const addTimeoutToAction = (delay, action) => ({
  type: 'TIMEOUT'
  , delay
  , action
})

中间件只是捕获它,并应在超时结束后发送动作

({dispatch, getState}) => next => action => {
  if (action && action.type === 'TIMEOUT') {
    setTimeout(() => {
      dispatch(action.action);
    }, action.delay)
  }
  next(action);
}

所以我的期望是中间件中的调度功能会将操作发送回中间件链,在那里它将再次开始全部通过。

我的示例代码使用普通操作,但是thunked操作不是。请帮助我了解如何将延迟操作重新路由回中间件链。

示例代码:

http://codepen.io/Fen1kz/pen/zKadmL?editors=0010

1 个答案:

答案 0 :(得分:0)

您的代码应该如下所示

const action3 = () => (dispatch, getState) => {
    dispatch({
        type: 'action3'
    });
}

每当你使用thunk中间件时,你必须调用dispatch来调度动作,你不能返回一个对象。

以下是更正后的代码:http://codepen.io/anon/pen/pEKWRK?editors=0010

希望这有帮助。