为什么调度不能在初始负载的警戒内同步运行?

时间:2019-04-01 13:41:07

标签: angular ngrx

我看到在某些特定情况下,store.dispatch(...)并没有像我期望的那样同步执行化简器。这似乎仅在CanActivate防护中以及首次加载应用程序时发生。

我已经在分派(A)之前,reducer(B)和分派(C)之后放入控制台日志语句,但是我可以清楚地看到输出(在某些情况下)以A,C顺序记录,B。这是在嵌套防护中发生的,其工作原理类似。

  • 顶级警卫人员加载实体并调度LoadAll事件以设置实体并将状态为true的已加载标志设置为

  • 儿童看守从路线获取ID,检查记录是否在商店中,并通过调度Select(id)事件选择记录

  • 孙子后卫使用选定的实体做出决定

在后卫中

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,BC。在某些情况下,我会看到A,C,B。

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

1 个答案:

答案 0 :(得分:2)

调度是一种异步操作。

请参见https://github.com/ngrx/platform/issues/877