我想逐个在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.当获取所有用户时,这不会调用Subscriber的onComplete()
方法。
2.如果getUser
方法出错,应用程序崩溃。与io.reactivex.exceptions.UndeliverableException
例外
你能告诉我我在哪里错了吗?
emitter.onComplete()
和getUids()
Observables中调用getUser(...)
,然后在.toList()
之后追加.flatMap(this::getUser)
。
返回发出单个项的Single,由有限源ObservableSource发出的所有项组成的列表。UndeliverableException
是你的.flatMap(this::getUser)
中发生的异常的包装器。我无法帮助您了解您提供的信息,在抛出异常时您想要发生什么?