angular - 为什么在初始加载时调度没有在守卫内同步运行?
问题描述
我看到在某些特定情况下 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,B C。相反,在某些情况下,我会看到 A,C,B。
有人可以帮助解释这里发生了什么吗?
解决方案
调度是一个异步操作。
推荐阅读
- python - 输出截断( img.sum(axis=2)
- php - 替换函数文件中的字体真棒图标
- java - Java 8:内联初始化的哈希映射不可序列化
- python - sklearn中训练和测试数据之间的属性不匹配 - 线性回归
- c# - 动作<>的弱事件管理器
- spring-boot - Solace: Unknown Durable Topic Endpoint
- android - Android studio 内部存储 FileOutputStream FileNotFound
- windows - How to convert encodingName to codePage identifier?
- javascript - 在传单地图上显示用户的位置
- c++ - how to use gcc instrumentation options without a native filesystem