如何在RxJava中执行链任务?

问题描述 投票:2回答:1

我想逐个在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例外

你能告诉我我在哪里错了吗?

java android rx-java rx-java2 rx-android
1个回答
0
投票
  1. emitter.onComplete()getUids() Observables中调用getUser(...),然后在.toList()之后追加.flatMap(this::getUser)。 返回发出单个项的Single,由有限源ObservableSource发出的所有项组成的列表。
  2. UndeliverableException是你的.flatMap(this::getUser)中发生的异常的包装器。我无法帮助您了解您提供的信息,在抛出异常时您想要发生什么?
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.