簡體   English   中英

RxJava2將兩個Single轉換為Completable

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM