Rx.Observable.if
如果条件observable解析为true或false,我想用它来运行两个observable中的一个.
我想要实现的将是这样的:
Rx.Observable.if(conditionalObservable.map(x => x.length > 0), firstObservable, secondObservable).subscribe()
如果conditionalObservable
发送一个next然后以true值完成,则firstObservable
应该运行,否则,secondObservable
应该运行.
现在显然这不起作用,因为Rx.Observable.if
期望一个函数有条件,而不是一个可观察的.如何在RXJS中实现完全相同的功能?
注意:这个问题几乎相同,但我认为它不够简洁,因为1)你必须有两个pausable
语句和2)除非你附加一个take(1)
条件的observables,你不能保证条件不会发出更多下一个活动.IMO这是一种解决方法,更容易出现人为错误.
如果我理解得很好,你可以尝试这样的事情:
conditionalObservable.map(x => x.length > 0) .last() .flatMap(function(condition){ return condition ? firstObservable : secondObservable}); .subscribe()
我添加了last
部分是因为你提到你要在conditionalObservable
最后一个值上选择你的observable(第一个或第二个).
我不确定if
这里的运算符的值,因为它基于标量值进行切换,该标量值必须由选择器函数同步生成.因此,除非您使用该函数返回一个可在闭包中访问的变量,并且您可以在评估条件的位置进行修改,但在我看来它并不是那么有用.即便如此,您的选择器也会变成不纯的功能,这不是测试目的的最佳实践.