首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NGRX在路由器保护中的应用

NGRX在路由器保护中的应用
EN

Stack Overflow用户
提问于 2022-08-17 08:09:49
回答 1查看 77关注 0票数 0

在使用NGRX进行复杂初始化时需要一些帮助

我在我的一条路由上使用了一个CanActivate保护,以确保我的NGRX存储是用我的组件的必要数据初始化的。我正在学习这篇文章(https://stackoverflow.com/a/48652379/1568482)中的例子,并以此为基础。

这是我的CanActivate警卫的逻辑

代码语言:javascript
运行
复制
  outputGrp$ = this.store.pipe(select(selectOutputGroup));
  inputGrp$ = this.store.pipe(select(selectInputGroup));
-----------------------------------------
return <Observable<boolean>>this.store.select(selectGroupsLoaded).pipe(
      map(loaded => {
        if(!loaded)
          this.store.dispatch(loadMainCanvas());
        return loaded;
      }),
      filter(loaded => !!loaded),
      take(1),
      withLatestFrom(this.outputGrp$), //Get Output Group ID
      tap(([loaded, og]) => this.outputGroupId = <string>og?.id),
      filter(loaded => !!loaded),
      take(1),
      map((data) => data[0]),
      withLatestFrom(this.inputGrp$), //Get Input Group ID
      tap(([loaded, ig]) => this.inputGroupId = <string>ig?.id),
      filter(([loaded, ig]) => !!loaded),
      take(1),
      //THIS NEVER GETS EVALUATED AGAIN AFTER STORE IS UPDATED FROM CALL BELOW!!!
      withLatestFrom(this.store.select(selectInputGroupProcessorsLoaded)), //See if Input Group Processors Loaded
      map(([l1, loaded]) => {
        if(!loaded)
          this.store.dispatch(loadProcessorsForGroup({groupId: this.inputGroupId, groupType: 'input'}));
        return loaded;
      }),
      filter(loaded =>!!loaded),
      take(1),
      // GET: ERROR Error: Uncaught (in promise): EmptyError: no elements in sequence
}

在我的存储库中,我存储要测试的每一件东西的布尔值,以查看数据是否已加载。我在这里评估这些值,如果它们没有加载,我会发出一个调用来检索数据并更新存储。

在加载了“主画布”项之后,我在这里为将来的调用(groupIds)继续并检索一些必要的数据。数据加载,我可以用必要的数据来设置变量。

当我到达withLatestFrom(this.store.select(selectInputGroupProcessorsLoaded))时,它的计算结果为FALSE,并落入map()函数中。在那里,商店发出一个调用来检索数据,并且商店被成功更新,但是.selectInputGroupProcessorsLoaded似乎没有改变,导致语句被重新评估。

我还有一些类似的章节,它们都是以同样的方式失败的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-17 12:43:34

所以,把withLatestFrom切换到switchMap解决了我的问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73384977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档