我在Angularv5应用程序中使用了@ngrx/router-store,最近我遇到了一个错误:Navigation ID X is not equal to the current navigation id Y
(其中X和Y是整数).
当我从特定路由B导航到路由A时,这个问题会一直发生.从任何其他路由导航到路由A似乎都可以.
我发现的另外S.O. issue related to this个问题可能是由于多次快速更新导航导致的.为了测试是否发生了这种情况(不应该发生),我在根组件中订阅了路由导航事件,在订阅中设置了一个断点,并打开了一个调试会话来逐步解决问题.这么做,我看得出来
假设当前导航ID为11.当我导航到问题路径时,路由开始导航,成功执行每个导航事件,包括
NavigationEnd
,然后@ngrx/router store立即抛出'ROUTER_CANCEL'
个动作,说明:Navigation ID 12 is not equal to the current navigation id 13
.据我所知,12是正确的导航ID(同样,导航ID 11完成,并立即抛出'ROUTER_CANCEL'
,而路由不会发出任何进一步的导航事件).此外,'ROUTER_CANCEL'
action有效负载既包含导致问题的路由导航事件,也包含导致问题时存储的状态.导致问题的事件的ID为12,当时存储中的路由状态的ID为11.同样,12似乎是正确的导航ID,不应该抛出错误.从问题路径导航到用户配置文件路径时,在@ngrx/router store取消导航之前,不会进行其他导航.(即,我没有快速更新导航路由)
除了ngrx调度
'ROUTER_CANCEL'
个操作之外,没有报告错误(也没有抛出错误).
同样,遇到问题的路由运行良好,除非导航从特定路由B开始.据我所知,这条特定路由B没有什么不同或不寻常之处(问题路由a也不关心人们来自哪里——这两条路由彼此没有关联).
最后一件事:在调试会话之外触发bug似乎总是会导致表单Navigation ID X is not equal to the current navigation id X+1
中的错误,但是在调试会话内部触发bug可能会导致Navigation ID 11 is not equal to the current navigation id 15
或Navigation ID 13 is not equal to the current navigation id 20
等错误.
有人知道发生了什么吗?我对@ngrx/router store还不太熟悉,无法真正猜测这是怎么回事.我的假设是,当@ngrx/路由store 接收到NavigationEnd
个事件时,store 中的导航ID值会同步增加,所以我甚至不确定ID是如何出现故障的——更不用说在这种情况下,ID看起来是正确的了.
非常感谢您的任何 idea !
PS:我很乐意发布代码,但我的应用程序很大,我不知道这个bug是从哪里触发的.