当前位置: 首页 > Web前端 > HTML

SAP电商云SpartacusUINavigationService执行的一些细节

时间:2023-03-28 18:19:26 HTML

第一次触发时,navigation.uid没有值:下图:navigation.service的getNavigationNode方法。触发此订阅的条目:查看data$的数据源。来自导航服务的createNavigation方法。在createNavigation内部,将组合cmsComponentdata和getNavigationNode的结果。我们在上图的第23行使用了combineLatest算子。当Angular应用程序中有多个长期存在的可观察对象相互依赖以进行某些计算或执行确定逻辑时,建议使用此运算符。请注意,在每个可观察对象至少发出一个值之前,combineLatest不会发出初始值。这与withLatestFrom的行为相同,并且可能是一个潜在的问题(陷阱),因为既没有输出也没有错误,此时我们的一个(或多个)内部可观察对象可能没有按预期运行,或者订阅可能有发生了Delay现象(订阅晚了)。最后,如果我们使用只发出一个值的可观察对象,或者只需要每个对象完成前的最后一个值,forkJoin可能是更好的选择。看具体的例子:import{timer,combineLatest}from'rxjs';//timerOne在1s发出第一个值,然后每4sconst一次timerOne$=timer(1000,4000);//timerTwo在2s发出第一个值,然后每4sconsttimerTwo$=timer(2000,4000);//timerThree在3s发出第一个值,然后每4sconsttimerThree$=timer(3000,4000);//当一个计时器发出时,发出每个计时器的最新值作为arraycombineLatest(timerOne$,timerTwo$,timerThree$).subscribe(([timerValOne,timerValTwo,timerValThree])=>{/*Example:timerThreefirsttick:'TimerOneLatest:0,TimerTwoLatest:0,Timer三个最新:0timerOnesecondtick:'定时器一最新:1,定时器二最新:0,定时器三最新:0timerTwosecondtick:'定时器一最新:1,定时器二最新:1,定时器三最新:0*/console.log(`定时器一最新:${timerValOne},定时器二最新:${timerValTwo},定时器三最新:${timerValThree}`);});执行结果:第一次getNavigationEntryItems总是undefined,为什么?从store读取,store第一次肯定是空的,正常现象:按需加载:发送加载动作:设置断点成功:NavigationEntryItemEffects负责加载:加载成功:此时items有一个价值: