嵌套RxJava可观察对象的正确方法?
我正在使用RxJava和嵌套观察对象,如下所示。我想把一个可观测对象称为另一个可观测对象,让外部可观测对象发出内部可观测对象的结果。它似乎可以工作,但我不确定这是正确的实现,因为我无法找到任何文档进行确认嵌套RxJava可观察对象的正确方法?,java,rx-java,Java,Rx Java,我正在使用RxJava和嵌套观察对象,如下所示。我想把一个可观测对象称为另一个可观测对象,让外部可观测对象发出内部可观测对象的结果。它似乎可以工作,但我不确定这是正确的实现,因为我无法找到任何文档进行确认 public Observable<User> updateUser(final String id) { return Observable.create(new Observable.OnSubscribe<User>() { @Overri
public Observable<User> updateUser(final String id) {
return Observable.create(new Observable.OnSubscribe<User>() {
@Override
public void call(final Subscriber<? super User> observer) {
try {
if (!observer.isUnsubscribed()) {
getUser(id).subscribe(new Action1<User>() {
@Override
public void call(User user) {
observer.onNext(user);
observer.onCompleted();
}
});
}
} catch (Exception e) {
observer.onError(e);
}
}
});
}
public Observable<User> getUser(final String id) {
...
}
public Observable updateUser(最终字符串id){
返回Observable.create(newobservable.OnSubscribe(){
@凌驾
public void call(最终订户当您正在进行可观察的
转换时,避免呼叫订阅
,因为您必须注意@akarnokd和@zsxwing在评论中提到的所有问题
我也会避免使用Observable.create
,因为创建OnSubscribe
实现需要考虑背压和随之而来的复杂并发事务。更喜欢Observable.just
,Observable.from
,Observable.range
,Observable.using
(还有更多内容,请查看wiki),为了更高级的目的,请实现SyncOnSubscribe
此代码可能涵盖您的用例:
public Observable<User> updateUser(final String id) {
return getUser(id).doOnNext(user -> updateUser(user));
}
public void updateUser(User user) {
//whatever you want here
}
public Observable<User> getUser(final String id) {
...
}
public Observable updateUser(最终字符串id){
返回getUser(id).doOnNext(用户->更新用户(用户));
}
public void updateUser(用户){
//你想要什么都行
}
公共可观察的getUser(最终字符串id){
...
}
当您正在进行可观察的
转换时,避免调用订阅
,因为您必须注意注释中@akarnokd和@zsxwing提到的所有问题
我也会避免使用Observable.create
,因为创建OnSubscribe
实现需要考虑背压和随之而来的复杂并发事务。更喜欢Observable.just
,Observable.from
,Observable.range
,Observable.using
(还有更多内容,请查看wiki),为了更高级的目的,请实现SyncOnSubscribe
此代码可能涵盖您的用例:
public Observable<User> updateUser(final String id) {
return getUser(id).doOnNext(user -> updateUser(user));
}
public void updateUser(User user) {
//whatever you want here
}
public Observable<User> getUser(final String id) {
...
}
public Observable updateUser(最终字符串id){
返回getUser(id).doOnNext(用户->更新用户(用户));
}
public void updateUser(用户){
//你想要什么都行
}
公共可观察的getUser(最终字符串id){
...
}
我认为首选的方法是链接可观察对象,而不是嵌套它们…为什么要嵌套它,可以直接返回/调用getUser?我想嵌套它,因为它使调用代码更简单。不可观察的版本类似于公共用户updateUser(最终字符串id){//update User code return getUser(id);}但是在您的示例中,getUser和updateUser都返回Observable,updateUser只运行getUser并发出其值,所以updateUser(id){return getUser(id);}
不要这样做。这通常意味着取消订阅、资源清理和背压被破坏,而且很难解释。如果你想正确处理这些事情,你的代码将比链接观察对象复杂得多/我认为首选的方法是链接观察对象,而不是嵌套它们……你为什么要嵌套它,哟你可以直接返回/调用getUser?我想嵌套它,因为它使调用代码更简单。不可观察的版本类似于公共用户updateUser(最终字符串id){//update User code return getUser(id);}但是在您的示例中,getUser和updateUser都返回Observable,updateUser只运行getUser并发出其值,所以updateUser(id){return getUser(id);}
不要这样做。这通常意味着取消订阅、资源清理和背压被破坏,并且很难进行推理。如果您想正确处理这些事情,您的代码将比链接观察对象复杂得多/