在这里真的需要一些帮助,以解决我面临的这个难题。.我要用甜甜圈的生产来粉刷一下。 (在感到压力时我们吃的那圈东西)
应该如何
在理想情况下,用户应该能够更改甜甜圈的“工厂”和“打顶”设置。
情况是,每次导入甜甜圈时,选定的工厂都会立即制作带有选定浇头的甜甜圈。
制作甜甜圈的时间长短不一。
制作甜甜圈后,它将被存储。
现在,我面临的问题是我无法更改Factory&Topping。 (它始终是默认值N1
,使用下面的代码应该可以更好地解释难题。)
注意
顺序很重要。 如果用户键入
a
,b
,c
,则甜甜圈应为["N1a", "N1b", "N1c"]
,即使甜甜圈中特定类型的甜甜圈的制作时间较长。 如果用户键入a
,2
,i
,j
,k
,3
,x
,{{1} },甜甜圈应该为y
这是我在下面编写的代码,希望您的rxjs专家在解决这个问题时感到高兴,因为我已经吃了太多的甜甜圈,试图解决这个问题!
代码: https://stackblitz.com/edit/rxjs-uhqftu
["N1a", "N2i", "N2j", "N2k", "N3x", "N3y"]
答案 0 :(得分:0)
我参加聚会有点晚,但是解决方案是使用switchMap()
中的concatMap()
而不是processEvent$
。这是代码:
const processEvent$ = settingEvents$.pipe(
switchMap( ( [ factory, topping ] ) => // change to switchMap and delete redundant merge
importDonutEvent$.pipe(
map( type => ( { factory, topping, type } ) ),
)
)
);
这是工作中的StackBlitz
答案 1 :(得分:0)
The other answer是正确的。我只想添加它,因为concatMap
等待内部可观察对象完成,然后再运行其功能以产生新的内部可观察对象。就您而言,importDonutEvent$
永远不会完成,因此settingEvents$
发出的值会无限期排队。
您的演示很好,但是您是否考虑过使用marble tests突出问题?测试和记录行为要容易得多。我创建了一个显示问题的stackblitz,其中有两个通过的实现,一个失败。所示的第二种选择是使用运算符withLatestFrom
。