[英]RxJava2 Convert two Single's into Completable
我有兩張單打,我想做的就是將它們轉換成Completable
final Single<Boolean> httpRequestOne = createHttpRequestOne();
final Single<Boolean> httpRequestTwo = createHttpRequestTwo();
如果兩個單打都返回true,則Completable的結果應為onSuccess,否則為onError。
我也希望它們並行運行,所以我認為concat在這里無濟於事
final Flowable<Boolean> flowable = httpRequestOne.concatWith(httpRequestTwo);
我將使用zip
運算符,以便您可以:
最終您可以將兩個結果轉換為所需的單個結果(在您的情況下,這只是一個邏輯與)。
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,則將從您的completable中發出onComplete
,否則將發生錯誤,並且onError
將在您的訂閱中觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.