当前位置:  开发笔记 > 编程语言 > 正文

RXJS如果具有可观察的条件

如何解决《RXJS如果具有可观察的条件》经验,为你挑选了1个好方法。

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这是一种解决方法,更容易出现人为错误.



1> user3743222..:

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

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

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

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

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有