在超时时调度自我操作

Dispatch self action in a timeout

出于某种原因,我无法在超时内调用相同的函数。如果这不是 Action 函数,它就可以正常工作。这不可能吗?我只是想确保我可以继续前进或进行黑客攻击...谢谢

export function initialize () {
  return function ( dispatch ) {

    if ( window.someAPIVar ) {
      console.log( 'done' );
    }
    else {
      console.log( 'looping' );
      //setTimeout( dispatch( initialize ), 250 );  // does not work
      //setTimeout( initialize, 250 );  // does not work
    }
  };
}
setTimeout( initialize, 250 );

这不会执行任何操作,因为 initialize 是一个函数,而 returns 是另一个函数。所以在 250ms 之后,setTimeout 会调用这个函数,你不会注意到任何东西。

setTimeout( dispatch( initialize ), 250 );

以上也不会做任何有用的事情。 dispatch( initialize ) 立即执行,returns 函数将在 250 毫秒后调用,这不是您想要的。看起来你在这里的意思是这样的:

setTimeout( () => dispatch( initialize() ), 250 );

您需要传递调用 dispatch 的函数,并且 dispatch 需要接收动作创建者的值,它可以是像 { type: 'SOME_ACTION', payload: 1 } 这样的对象或函数像 dispatch => dispatch({ type: 'SOME_ACTION', payload: 1 }).

如果这有点令人困惑,请通读位于 https://github.com/gaearon/redux-thunk 的 redux-thunk GitHub 页面上的示例。