21

我的代码 https://gist.github.com/ButuzGOL/707d1605f63eef55e4af

因此,当我收到登录成功回调时,我想进行重定向,
重定向也通过调度程序工作。

我得到 Dispatch.dispatch(...): Cannot dispatch 在调度中间。

中间是否有任何黑客可以采取行动?

4

4 回答 4

27

我看不到您发布的要点中的何处进行了重定向。我只看到 AUTH_SIGNIN 和 AUTH_SIGNIN_SUCCESS 操作,它们看起来很简单。

但是不,在调度过程中创建一个动作是没有技巧的,这是设计使然。行动不应该是导致改变的事情。它们应该像报纸一样,通知应用程序外部世界的变化,然后应用程序响应该消息。商店本身会引起变化。行动只是通知他们。

如果您遇到此错误,那么您需要备份并查看您是如何处理原始操作的。大多数情况下,您可以将应用程序设置为响应原始操作,完成您需要做的所有事情,并避免尝试创建第二个操作。

于 2014-10-27T05:48:47.180 回答
6

您可以通过“调度”下一个操作而不是直接调用它来使其工作,这是一个示例代码:

// instead of doing this
Dispatcher.dispatch(...);

// go like this
setTimeout(function() {
  Dispatcher.dispatch(...);
}, 1);

这将导致您的下一个调度稍后在当前调度过程中被调用,并且不会发生错误。

如果您的调度代码在回调中,则任何其他类型的异步操作都可以正常工作(例如在 Ajax 请求的响应中)。

我正在使用这种样式来使某些表单响应这里的通用数据,并且我没有遇到任何问题,至少我使用它的方式是这样。

于 2015-04-02T22:53:29.247 回答
-2

您可以使用调度程序中的“延迟”选项。在你的情况下,它会像:

Dispatcher.dispatch.defer(...);
于 2016-10-10T22:30:35.337 回答
-2

您可以检查调度程序是否正在调度,例如:

if(!MyDispatcher.isDispatching()) {
    MyDispatcher.dispatch({...});
}
于 2017-03-31T14:03:54.973 回答