添加新的订阅时以前完成

添加新的订阅时以前完成

问题描述:

我在CompositeDisposable 3个Disposaple对象:添加新的订阅时以前完成

CompositeDisposable disposables = new CompositeDisposable(); 

disposables.add(
    interactor1 
    .someMethod1() 
    .subscribe(...some handling logic)); 

disposables.add(
    interactor 
    .someMethod2() 
    .subscribe(...some handling logic)); 

disposables.add(
    interactor 
    .someMethod3() 
    .subscribe(...some handling logic)); 

前两种方法返回一些数据,并将其传送给其他方法。第一个两个完成时必须调用第三个方法。我该怎么做?

实施例的方法的签名:

Single<List<String>> someMethod1(); 
Single<List<Integer>> someMethod2(); 
Single<String> someMethod3(); 
+1

您可能想要将前两个与zip运算符结合起来,并调用订阅中的第三个方法:http://reactivex.io/documentation/operators/zip.html – Matt

你会zip第2个观测量,然后对所述输出使用flatmap。当两个observable都生成一个值时,zip函数会投影一个项目,然后将组合的对象传递给flatmap,然后将其传递给第三个可观察函数。

一个例子是胜过千言万语:

public void SO() { 
    Single.zip(someMethod1(), 
      someMethod2(), 
      Pair::create) // (1) create pair from results of someMethod1 and someMethod2 
      .flatMap(methodsResultPair -> { 
       // (2) handling logic of combined result 
       // methodsResultPair.first is result of someMethod1 
       // methodsResultPair.second is result of someMethod2 
       return someMethod3(); 
      }) 
      .subscribe((resultOfMethod3, throwable) -> { 
       // process resultOfMethod3 
       // process error 
      }); 
} 

public Single<List<String>> someMethod1() { 
    return Single.just(Collections.<String>emptyList()) 
      .doOnSuccess(objects -> { /* (3) handling logic of someMethod1 result */ }); 
} 

public Single<List<Integer>> someMethod2() { 
    return Single.just(Collections.<Integer>emptyList()) 
      .doOnSuccess(objects -> { /* (4) handling logic of someMethod2 result */ }); 
} 

public Single<String> someMethod3() { 
    return Single.just(""); 
} 

有了这个,你有一个一次性的,而不是三个,因为他们都是现在一个反应​​链的一部分。 Single.just()方法仅用于提供一些虚拟数据。