我正在尝试创建一个observable来观察我的应用程序中的变量,一旦变量变为null,所有订阅者都应该得到通知并完成。我假设takeUntil属性最好,但我似乎做错了。
export default class service {
constructor($window) {
'ngInject'
this._currentObject = new BehaviorSubject(null)
}
open(config){
this._currentObject.next(config)
return this._currentObject.asObservable().takeUntil(null)
}
close(){
this._currentObject.next(null)
}
}
因此对于任何调用open函数的方法,我想返回一个他们可以订阅的新Observable,这样他们就知道对象何时变回null。这将发生在应用程序中调用关闭方法
的其他位置service.open({
prop:'test',
prop2: 'right',
}).subscribe(s => {
// fires when currentObject is set back to null
//automatically completes
})
尝试这个时,我在takeUntil上遇到错误(你提供了'null',其中有一个流是预期的。你可以提供一个Observable,Promise,Array或Iterable。)
我甚至不确定这是一个不错的方法,但是想知道是否有人可以看看并给我建议。 谢谢!
答案 0 :(得分:4)
takeUntil
将一个observable作为一个参数 - 而不是一个值 - 直到该observable发出一个值。
takeWhile
更有可能是您需要的运算符,因为它需要一个谓词:
const source = new Rx.BehaviorSubject(null);
source
.takeWhile((value, index) => (value !== null) || (index === 0))
.subscribe(
(value) => console.log(value),
undefined,
() => console.log("completed; changed back to null")
);
source.next(1);
source.next(2);
source.next(3);
source.next(null);

.as-console-wrapper { max-height: 100% !important; top: 0; }

<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>
&#13;