我的 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();
答案 0 :(得分:2)
一个例子胜过千言万语:
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()
方法仅用于提供一些虚拟数据。
答案 1 :(得分:0)