我有两个单打,我想做的是将这些转换成可完成的
final Single<Boolean> httpRequestOne = createHttpRequestOne();
final Single<Boolean> httpRequestTwo = createHttpRequestTwo();
如果两个单元都返回true,则Completable的结果应该是onSuccess,否则它将是onError。
我也希望它们并行运行,所以我认为concat在这里没有帮助
final Flowable<Boolean> flowable = httpRequestOne.concatWith(httpRequestTwo);
答案 0 :(得分:2)
我会使用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();
}
然后订阅它:
createCompletable()
.subscribe(() -> logd("onCompelte"),
throwable -> logd("error: " + throwable.getMessage()));
如果Single
完全排名为TRUE,onComplete
将从您的补丁中发出,否则您将收到错误,onError
将在您的订阅中触发。