假设我们有一个Observable:
var observable = Rx.Observable .fromEvent(document.getElementById('emitter'), 'click');
如何使其完成(什么将触发所有订阅的观察者的onComplete事件)?
在目前的形式,你不能.您的observable源自一个未完成的源,因此它本身无法完成.您可以做的是使用完成条件扩展此源.这将工作如下:
var end$ = new Rx.Subject(); var observable = Rx.Observable .fromEvent(document.getElementById('emitter'), 'click') .takeUntil(end$);
当你想要结束时observable
,你做到了end$.onNext("anything you want here");
.在这种情况下,结束事件由您生成.如果这是生成该事件的另一个源(按键等),那么您可以直接将从该源派生的observable作为参数takeUntil
.
文档:
http://reactivex.io/documentation/operators/takeuntil.html
https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/takeuntil.md