gpt4 book ai didi

javascript - RXJS if with observable 作为条件

转载 作者:数据小太阳 更新时间:2023-10-29 06:10:40 26 4
gpt4 key购买 nike

我想使用 Rx.Observable.if 在条件可观察对象解析为 true 或 false 时运行两个可观察对象之一。

我想要实现的是这样的:

Rx.Observable.if(conditionalObservable.map(x => x.length > 0), firstObservable, secondObservable).subscribe()

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

显然这行不通,因为 Rx.Observable.if 需要一个有条件的函数,而不是一个可观察的函数。我怎样才能在 RXJS 中实现完全相同的功能?

备注:This issue几乎相同,但我认为它不够简洁,因为 1) 你必须有两个 pausable 语句和 2) 除非你将 take(1) 附加到你的条件可观察量,你不能保证条件不会发出更多的下一个事件。 IMO 这是一种解决方法,但会出现更多的人为错误。

最佳答案

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

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

我添加了 last 部分,因为您提到要在 conditionalObservable 最后一个值上选择您的可观察对象(第一个或第二个)。

我不确定此处 if 运算符的值,因为它根据必须由选择器函数同步生成的标量值进行切换。因此,除非您使用该函数返回一个可在闭包中访问的变量,并且您可以在评估条件时修改该变量,否则我认为它不是很有用。即便如此,您的选择器也会变成一个不纯的函数,这不是测试目的和其他目的的最佳实践。

关于javascript - RXJS if with observable 作为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34728827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com