【发布时间】:2017-07-20 19:41:55
【问题描述】:
我正在尝试订阅以下函数,但函数的订阅函数没有收到任何数据,但错误函数可以。我意识到如果我在函数内部创建第二个订阅者,它也不会接收数据。使用 Rx-JS 时,我能够向主题添加多个订阅者。 Rx-Java 是一样的还是有不同的行为,或者我做错了什么?
public static PublishSubject<Boolean> doSomeWork() {
final PublishSubject<Boolean> res = PublishSubject.create();
doSomeOtherWork().subscribe(new Consumer<Boolean>() {
@Override
public void accept(@NonNull Boolean aBoolean) throws Exception {
res.onNext(true);
}
});
res.subscribe(new Consumer<Boolean>() {
@Override
public void accept(@NonNull Boolean bool) throws Exception {
//receives data
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
handleSomeStuff()
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(@NonNull Boolean aBoolean) throws Exception {
res.onNext(aBoolean);
}
});
}
});
return res;
}
【问题讨论】:
-
使用
BehaviorSubject<Boolean>而不是PublishSubject<Boolean>。最后发出的值(如果有)以及任何错误或完成事件将随后可用。如果您需要的不仅仅是最后一个值,您将不得不使用更通用的ReplaySubject,但BehaviorSubject满足我在这种情况下的所有需求。
标签: android rx-java observable rx-android