Jak*_*old 2 java android rx-java2
我有两个单曲,我想做的是将它们转换为 Completable
final Single<Boolean> httpRequestOne = createHttpRequestOne();
final Single<Boolean> httpRequestTwo = createHttpRequestTwo();
Run Code Online (Sandbox Code Playgroud)
如果两个单曲都返回 true,则 Completable 的结果应该是 onSuccess 否则它将是 onError。
我也希望它们并行运行,所以我认为 concat 在这里无济于事
final Flowable<Boolean> flowable = httpRequestOne.concatWith(httpRequestTwo);
Run Code Online (Sandbox Code Playgroud)
我会使用zip运算符,以便您可以:
最终您可以将两个结果转换为您想要的单个结果(在您的情况下,它只是一个逻辑 AND)。
private Completable createCompletable() {
return Single.zip(createHttpRequestOne().subscribeOn(Schedulers.newThread()),
createHttpRequestTwo().subscribeOn(Schedulers.newThread()), (b1, b2) -> b1 && b2)
.flatMap(new Function<Boolean, SingleSource<Boolean>>() {
@Override
public SingleSource<Boolean> apply(@NonNull Boolean aBoolean) throws Exception {
if (aBoolean) {
return Single.just(true);
} else {
return Single.error(new Throwable("one of the Single returned FALSE"));
}
}
}).toCompletable();
}
Run Code Online (Sandbox Code Playgroud)
然后订阅它:
createCompletable()
.subscribe(() -> logd("onCompelte"),
throwable -> logd("error: " + throwable.getMessage()));
Run Code Online (Sandbox Code Playgroud)
如果两者都Single完全发出 TRUE,onComplete将从您的可完成项中发出,否则您将收到错误,并将onError在您的订阅中触发。
| 归档时间: |
|
| 查看次数: |
1182 次 |
| 最近记录: |