RXJS如果具有可观察的条件

bar*_*dog 5 javascript rxjs

Rx.Observable.if如果条件observable解析为true或false,我想用它来运行两个observable中的一个.

我想要实现的将是这样的:

Rx.Observable.if(conditionalObservable.map(x => x.length > 0), firstObservable, secondObservable).subscribe()
Run Code Online (Sandbox Code Playgroud)

如果conditionalObservable发送一个next然后以true值完成,则firstObservable应该运行,否则,secondObservable应该运行.

现在显然这不起作用,因为Rx.Observable.if期望一个函数有条件,而不是一个可观察的.如何在RXJS中实现完全相同的功能?

注意:这个问题几乎相同,但我认为它不够简洁,因为1)你必须有两个pausable语句和2)除非你附加一个take(1)条件的observables,你不能保证条件不会发出更多下一个活动.IMO这是一种解决方法,更容易出现人为错误.

use*_*222 6

如果我理解得很好,你可以尝试这样的事情:

conditionalObservable.map(x => x.length > 0)
  .last()
  .flatMap(function(condition){
      return condition ? firstObservable : secondObservable});
  .subscribe()
Run Code Online (Sandbox Code Playgroud)

我添加了last部分是因为你提到你要在conditionalObservable最后一个值上选择你的observable(第一个或第二个).

我不确定if这里的运算符的值,因为它基于标量值进行切换,该标量值必须由选择器函数同步生成.因此,除非您使用该函数返回一个可在闭包中访问的变量,并且您可以在评估条件的位置进行修改,但在我看来它并不是那么有用.即便如此,您的选择器也会变成不纯的功能,这不是测试目的的最佳实践.