首页 > 解决方案 > 为什么在初始加载时调度没有在守卫内同步运行?

问题描述

我看到在某些特定情况下 store.dispatch(...) 没有像我预期的那样同步执行减速器。这似乎只发生在 CanActivate 守卫和应用程序首次加载时。

我已经在调度(A)之前、reducer(B)和调度(C)之后放入了控制台日志语句,但我可以清楚地看到输出(在某些情况下)按 A、C、B 的顺序记录。这发生在嵌套的守卫中,它们的工作类似于..

在后卫:

console.log('A');
this.store.dispatch(new fromStore.LoadAllThings(things));
console.log('C');

减速机:

case ThingActionTypes.LoadAll: {
  console.log('B');
  return adapter.addAll(action.payload, {
    ...state,
    loaded: true,
  });
}

鉴于上面的代码,我希望控制台输出是 A,B C。相反,在某些情况下,我会看到 A,C,B。

有人可以帮助解释这里发生了什么吗?

标签: angularngrx

解决方案


调度是一个异步操作。

https://github.com/ngrx/platform/issues/877


推荐阅读