RxJS 5可观测源是否可以被链下游的另一个源阻止?
RxJS 5可观测源是否可以被链下游的另一个源阻止?,rxjs,observable,Rxjs,Observable,RxJS 5Angular 2 RC4应用程序,使用Typescript 1.9编写: 我在一条链中有两个可见物。我想,如果在第二个条件得到满足,第一个将立即完成。我的努力似乎过于复杂。在下面的示例中,我尝试在第一个可观察对象发出3个值后停止它: source = Observable.interval(1000) .do(()=>this.print("*******EMITTING from Source*******")) .switchMap(cou
RxJS 5
Angular 2 RC4
应用程序,使用Typescript 1.9
编写:
我在一条链中有两个可见物。我想,如果在第二个条件得到满足,第一个将立即完成。我的努力似乎过于复杂。在下面的示例中,我尝试在第一个可观察对象发出3个值后停止它:
source = Observable.interval(1000)
.do(()=>this.print("*******EMITTING from Source*******"))
.switchMap(count => {
if(count<3){ //just pass along the value
return Observable.create(observer=>{
observer.next(count);observer.complete()
})
}
else{ //abort by issuing a non-productive observable
return Observable.create(observer=>
observer.complete()
)
}
})
this.source.subscribe(count=>this.print('Ouput is '+count);
因此,从功能上讲,我得到了我想要的结果,因为更广泛的脚本在三次输出后停止接收通知。不过,我相信还有更好的办法。我的问题是:
take
获取前N个事件并完成流
this.source = Observable.interval(1000)
.do(()=>this.print("*******EMITTING from Source*******"))
.take(3);
this.source.subscribe(count=>this.print('Ouput is '+count);
您的示例的流未完成,因为当内部流完成时,switchMap
的外部流未完成switchMap()
等于map().switch()
。在您的示例中,贴图
部分发出可见光如:
开关
部分会切换这些观察值,并一直等待即将到来的观察值
编辑
您的示例也可以写成:
source = Observable.interval(1000)
.do(()=>this.print("*******EMITTING from Source*******"))
.takeWhile(count => count < 3);
谢谢你的提示
.take()
在这里工作(+1)。我用这个作为一个简单的例子;我更大的问题是:如何(如果可能的话)在某种条件下从第二个观测值开始完成第一个观测值。例如,假设我在一个链中有两个可观察对象,如果第一个可观察对象发出true
,我想停止所有工作。也许一个takeUntil()
会是什么意思你所说的链中的2个可观察对象是什么意思?可能takeXxx
操作员会像你猜的那样帮助你。顺便说一句,这篇文章让我对takeXxx
操作符大开眼界。我的OP在一个链中有两个可观测值(switchMap
输出第二个)。我只是在寻找一种方法,从其中杀死/完成流,我打赌一个运营商会让我这么做。我将阅读您链接的文章。我添加了一个示例,如果内部可观察的
发出真的
,则终止流。您是对的,这篇文章以及您在这里的回复为我提供了所需的一切。非常感谢。
source = Observable.interval(1000)
.do(()=>this.print("*******EMITTING from Source*******"))
.takeWhile(count => count < 3);
source = Observable.interval(1000)
.do(()=>this.print("*******EMITTING from Source*******"))
.switchMap(count => createSomeObservable(count))
.takeWhile(x => x !== true);