我的 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("");
}
有了这个,你就拥有了一个一次性的而不是三个,因为它们现在都是一个 react 链的一部分。 Single.just()
方法仅用于提供一些虚拟数据。
关于java - 先前完成后添加新订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44247759/