添加新的订阅时以前完成
问题描述:
我在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();
答
一个例子是胜过千言万语:
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()
方法仅用于提供一些虚拟数据。
您可能想要将前两个与zip运算符结合起来,并调用订阅中的第三个方法:http://reactivex.io/documentation/operators/zip.html – Matt