gpt4 book ai didi

angular - 为什么 dispatch 在初始加载时没有在 guards 中同步运行?

转载 作者:太空狗 更新时间:2023-10-29 18:27:54 25 4
gpt4 key购买 nike

我发现在某些特定情况下,store.dispatch(...) 并没有像我预期的那样同步执行 reducer。这似乎只发生在 CanActivate 守卫中以及应用程序首次加载时。

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

  • 顶级守卫加载实体并分派(dispatch) LoadAll 事件以设置实体并将状态中的加载标志设置为 true

  • Child guard 从路线获取 ID,检查存储中是否存在记录,并通过调度 Select(id) 事件选择它

  • 孙子守卫使用选定的实体做出一些决定

在守卫中:

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

reducer :

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

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

谁能帮忙解释一下这里发生了什么?

最佳答案

调度是一种异步操作。

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

关于angular - 为什么 dispatch 在初始加载时没有在 guards 中同步运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55456573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com