我有一个BehaviorSubject,我想要重置-我的意思是,我希望最新的价值不可用,就像它是刚刚创建的。
我似乎没有看到一个API来做到这一点,但我想还有另一种方法可以实现同样的结果吗?
我想要的行为是,我需要发出事件,如果某个特定的管理器处于“已启动”状态,我希望订阅者在订阅时获得最新的事件。但是,当这个管理器被“停止”时,最新的事件就不应该可用了(就像它从一开始就没有启动一样)。
发布于 2017-08-30 16:35:25
我假设您希望清除BehaviorSubject (因为否则不会调用onComplete )。这是不支持的,但是您可以通过拥有一个被使用者忽略的当前值来实现类似的效果:
public static final Object EMPTY = new Object();
BehaviorSubject<Object> subject = BehaviorSubject.createDefault(EMPTY);
Observable<YourType> obs = subject.filter(v -> v != EMPTY).cast(YourType.class);
obs.subscribe(System.out::println);
// send normal data
subject.onNext(1);
subject.onNext(2);
// clear the subject
subject.onNext(EMPTY);
// this should not print anything
obs.subscribe(System.out::println);发布于 2017-09-04 17:57:57
切换可观测开关值的另一种方法是使用switchMap()在实际可观测值和空值之间切换。
让我们假设您有一个manager对象,并且它有一个可观察的、显示其状态的对象。然后,
subjectObservable = manager.getStateObservable()
.switchMap( state -> state == ON ? subject : Observable.never() );只有在manager处于ON状态时才会发出值。
发布于 2018-10-10 17:05:28
只需像这样使用setTimeout:
setOtpoint(value) {
this._setOption.next(value);
// Clear BehaviorSubject after emit value
setTimeout(() => {
this._setOption.next(null);
}, 100);
}https://stackoverflow.com/questions/45960121
复制相似问题