在这篇文章中,我们将为您详细介绍如何在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 合并两个请求)
- android – RXJava – 一个接一个地运行多个observable(比如concat,但每个observable都有onCompleted)
- android – RxJava2如何将Single链接到Completable,以便在Completable完成时获得订阅
- android-如何在RxJava中链接任务
- CompletableFuture、Future 和 RxJava 的 Observable 的区别
如何在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)
通常,此运算符是flatMap
on 的“替换” 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)
我有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完成时获得订阅
如何将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应用程序注册,在该应用程序中,我需要一个接一个地执行几个任务
任务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()方法.
请帮忙〜
编辑-
每个任务都取决于先前的任务结果.一次应有一个任务.
//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``Observable
RxJava
我所知道的是所有都是异步的,但是
Future.get()
阻塞线程
CompletableFuture
给出回调方法
RxJava Observable
-–CompletableFuture
与其他好处类似(不确定)
例如:如果客户端需要进行多个服务调用,并且当我们使用Futures
(Java)Future.get()
时将按顺序执行......想知道它在
RxJava 中如何更好......
文档http://reactivex.io/intro.html说
很难使用 Futures 来优化组合条件异步执行流(或者是不可能的,因为每个请求的延迟在运行时会有所不同)。
当然,这是可以做到的,但它很快就会变得复杂(因此容易出错),或者它会过早地阻塞 Future.get(),从而消除了异步执行的好处。
真的很想知道如何RxJava
解决这个问题。我发现很难从文档中理解。
今天关于如何在RxJava2中链接两个Completable和rxjava 合并两个请求的讲解已经结束,谢谢您的阅读,如果想了解更多关于android – RXJava – 一个接一个地运行多个observable(比如concat,但每个observable都有onCompleted)、android – RxJava2如何将Single链接到Completable,以便在Completable完成时获得订阅、android-如何在RxJava中链接任务、CompletableFuture、Future 和 RxJava 的 Observable 的区别的相关知识,请在本站搜索。
本文标签: