GVKun编程网logo

如何在RxJava2中链接两个Completable(rxjava 合并两个请求)

24

在这篇文章中,我们将为您详细介绍如何在RxJava2中链接两个Completable的内容,并且讨论关于rxjava合并两个请求的相关问题。此外,我们还会涉及一些关于android–RXJava–一个

在这篇文章中,我们将为您详细介绍如何在RxJava2中链接两个Completable的内容,并且讨论关于rxjava 合并两个请求的相关问题。此外,我们还会涉及一些关于android – RXJava – 一个接一个地运行多个observable(比如concat,但每个observable都有onCompleted)、android – RxJava2如何将Single链接到Completable,以便在Completable完成时获得订阅、android-如何在RxJava中链接任务、CompletableFuture、Future 和 RxJava 的 Observable 的区别的知识,以帮助您更全面地了解这个主题。

本文目录一览:

如何在RxJava2中链接两个Completable(rxjava 合并两个请求)

如何在RxJava2中链接两个Completable(rxjava 合并两个请求)

我有两个完成。我想做以下情形:如果第一个Completable到达onComplete,则继续第二个Completable。最终结果将是第二完成的onComplete。

当我有单个 getUserIdAlreadySavedInDevice() 和Completable login() 时,这就是我的方法:

@Overridepublic Completable loginUserThatIsAlreadySavedInDevice(String password) {    return getUserIdAlreadySavedInDevice()            .flatMapCompletable(s -> login(password, s))}

答案1

小编典典

您正在寻找andThen运营商。

返回一个Completable,它首先运行此Completable,然后运行另一个Completable。

firstCompletable    .andThen(secondCompletable)

通常,此运算符是flatMapon 的“替换” Completable

Completable       andThen(CompletableSource next)<T> Maybe<T>      andThen(MaybeSource<T> next)<T> Observable<T> andThen(ObservableSource<T> next)<T> Flowable<T>   andThen(Publisher<T> next)<T> Single<T>     andThen(SingleSource<T> next)

android – RXJava – 一个接一个地运行多个observable(比如concat,但每个observable都有onCompleted)

android – RXJava – 一个接一个地运行多个observable(比如concat,但每个observable都有onCompleted)

有没有办法实现以下目标:

我有3个Observable< MyData>类型的可观察对象.我想要的是:

>运行第一个可观察的
>观察第一个观察者的onCompleted
>运行第二个observable
>观察第二个可观测量的onCompleted
>运行第三个observable
>观察第三个可观测量的onCompleted

这可以通过concat来完成,但是我只能观察到最后的onCompleted.

难看的解决方案

我知道,如果我从前者的onCompleted事件中开始下一个obersvable,我就可以实现这一目标.

即使有任意数量的可观察量,还有其他方法可以达到这个目的吗?我想避免从onCompleted事件中将这一切链接在一起,因为这看起来非常难看,链接越深,它就越不清楚……

编辑 – UseCase

>首先,我想发出代表我的应用程序上次启动时加载的数据的数据(我将数据序列化为光盘)=>原因是,我想要一个非常快速的应用程序启动
>然后我想要第二次加载数据,以便在空状态下加载最新数据
>然后我想要第三次加载数据来加载最新数据的缺失深层数据

我想不断更新UI,我想知道,每个级别的数据加载完成

解决方法

我希望下面的代码有帮助.
Observable<MyData> observable1 = ...;
Observable<MyData> observable2 = ...;
Observable<MyData> observable3 = ...;

Observable
        .concat(observable1.doOnCompleted(this::onCompleteObservable1),observable2.doOnCompleted(this::onCompleteObservable2),observable3.doOnCompleted(this::onCompleteObservable3))
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe( ... );

这是示例方法.

void onCompleteObservable1() {
    //do some work
}

void onCompleteObservable2() {
    //do some work
}

void onCompleteObservable3() {
    //do some work
}

android – RxJava2如何将Single链接到Completable,以便在Completable完成时获得订阅

android – RxJava2如何将Single链接到Completable,以便在Completable完成时获得订阅

如何将Single链接到Completable,以便在Completable完成时获得订阅?

repository.downloadUser()是Single.

基于调试,似乎调用此方法中的Single但从未订阅(即,调用downloadUser()方法,但调用它所创建的Single内的代码).

问题是,如何使用原始订阅者获取repository.downloadUser()Single在链中订阅?我错过了什么或做错了什么?或者这不可能吗?

fun login(username: String, password: String): Completable {    
    return repository.login(username, password)
        .andThen {
            repository.downloadUser() // This is a Single
                .flatMap { downloadedUser ->
                    user = downloadedUser
                    it.toSingle()
                }
                // When I get this part working there are other things I want to 
                // chain as well.
}

编辑:我可能只是把它分成两个调用,一个用于Completable,然后另一个用于其余的调用.然而,如果有人知道这是否可能仍然是好的…

解决方法:

很确定这是你使用花括号. Kotlin认为你正在调用RxJava方法

public final Completable andThen(CompletableSource next) {
   return concatWith(next);
}

意味着返回类型是Completable,但您希望它作为Single.你需要的是什么

repository.login(username, password)
    .andThen(repository.downloadUser())
    .flatmap { ... }

android-如何在RxJava中链接任务

android-如何在RxJava中链接任务

我正在进行android应用程序注册,在该应用程序中,我需要一个接一个地执行几个任务

任务1
任务2
任务3

我想将这些任务一个接一个地链接起来,如果一个任务失败,则整个过程应该失败.

我想通过Rxjava解决此问题,谁能告诉我如何使用rxJava实现此问题.

(我已经浪费了5个小时,但是在RxJava中也找不到新手的解决方案)

我尝试过的

Observable.merge(task1,task2,task3).subscribe(new Observer<DataError>() {
            @Override
            public void onSubscribe(disposable d) {

            }

            @Override
            public void onNext(DataError dataError) {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {
             //this method is not called by rxJava
            }
        });

使用此方法,一切正常,但是rxJava不会调用onComplete()方法.

请帮忙〜

编辑-
每个任务都取决于先前的任务结果.一次应有一个任务.

最佳答案
假设我们有3个任务.从给定的整数数组中,找到偶数,将每个偶数乘以10,将每个数除以2

//A stream of observable to find even numbers
private Observable<Integer> findEven(Integer number) {
    return Observable
        .just(number)
        .filter(data -> data % 2 == 0);
}

//A stream of observable to multiply each number with 10
private Observable<Integer> multiplyBy10(Integer evennumber) {
    return Observable.just(evennumber).map(data -> data * 10);
}

//A stream of observable to divide each number with 2
private Observable<Integer> divideBy2(Integer evennumber) {
    return Observable.just(evennumber).map(data -> data / 2);
}

那么,我们如何链接此任务?

Observable
    .just(1,2,3,4,5,6,7,8)
    //find even numbers
    .flatMap(num -> findEven(num))
    //Now multiply each even number by 10
    .flatMap(num -> multiplyBy10(num))
    //Now to each number divide 2 
    .flatMap(num -> divideBy2(num))
    .subscribe(
        // result: 10,20,30,40
        result -> Log.v("","result: " + result),error -> Log.e("",error.getMessage())
    );

希望这可以帮助.

CompletableFuture、Future 和 RxJava 的 Observable 的区别

CompletableFuture、Future 和 RxJava 的 Observable 的区别

我想知道 和 之间 的CompletableFuture区别。Future``Observable RxJava

我所知道的是所有都是异步的,但是

Future.get()阻塞线程

CompletableFuture给出回调方法

RxJava Observable-–CompletableFuture与其他好处类似(不确定)

例如:如果客户端需要进行多个服务调用,并且当我们使用Futures(Java)Future.get()时将按顺序执行......想知道它在
RxJava 中如何更好......

文档http://reactivex.io/intro.html说

很难使用 Futures 来优化组合条件异步执行流(或者是不可能的,因为每个请求的延迟在运行时会有所不同)。
当然,这是可以做到的,但它很快就会变得复杂(因此容易出错),或者它会过早地阻塞 Future.get(),从而消除了异步执行的好处。

真的很想知道如何RxJava解决这个问题。我发现很难从文档中理解。

今天关于如何在RxJava2中链接两个Completablerxjava 合并两个请求的讲解已经结束,谢谢您的阅读,如果想了解更多关于android – RXJava – 一个接一个地运行多个observable(比如concat,但每个observable都有onCompleted)、android – RxJava2如何将Single链接到Completable,以便在Completable完成时获得订阅、android-如何在RxJava中链接任务、CompletableFuture、Future 和 RxJava 的 Observable 的区别的相关知识,请在本站搜索。

本文标签: