【发布时间】:2019-05-01 12:35:51
【问题描述】:
我想在 RxJava 中一个一个地执行任务。
例如:-
1. 从服务器获取用户 ID
2.通过ID从服务器获取用户。
我试过这个方法
public Observable<List> getUids(){
return Observable.create(emitter -> {
List<String> uids = new ArrayList<>();
//fetchData from server
emitter.onNext(uids);
});
}
public Observable<User> getUser(String uid){
return Observable.create(emitter -> {
User user = new User();
//fetchData user from server
emitter.onNext(user);
});
}
//Executing this code like
getUids().flatMapIterable(ids -> ids)
.flatMap(this::getUser)
.subscribe(new Observer<User>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(User user) {
print("next "+user.getName());
}
@Override
public void onError(Throwable e) {
print("error "+e.getMessage());
}
@Override
public void onComplete() {
print("complete");
}
});
里面有一些问题
1.在获取所有用户时,这不是调用订阅者的onComplete()方法。
2.如果getUser方法有错误,应用程序崩溃。 io.reactivex.exceptions.UndeliverableException 异常
你能告诉我我哪里弄错了吗?
【问题讨论】:
-
你能用
disposable吗? -
我是 RxJava 新手。如果它解决了我的问题,我会做任何解决方案
-
对无序结果使用
flatMap运算符或对有序结果使用concatMap,即task1.getIds().flatMapIterable(ids -> ids).flatMap(id -> task2.getUser(id)).subscribe(user -> { ... }) -
我已经这样做了
标签: java android rx-java rx-java2 rx-android