美文网首页Android-RxJava
Rxjava使得网络请求变得如此简单

Rxjava使得网络请求变得如此简单

作者: kevinsEegets | 来源:发表于2019-12-04 14:35 被阅读0次

RxJava 使得线程变得很容易,让我分享一个RxJava的附加好处-如何方便的连接网络

下面有三个场景

1. 网络调用之间的依赖: flatMap

1_h51wC6f9-Lysn09LUCpOZA.png

有一种情况:
如图所示, 在很懂情况下您需要进行这种链接操作, 例如, 通过FirstNetwork URL获取网络请求, 然后使用SecondNetwork URL获取另外一个网络请求, Second依赖First请求第二个网络请求.

我们可以使用flatMap

val disposable = firstNetworkCall()
    .flatMap{ secondNetworkCall(it) }
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { it -> doSomethingWithResonse($it) }

2. 使用mergeWith 合并请求并指向相同的观察者

把不同的任务merge到一起,在所有任务执行完毕并且发送完结果之后,在同一个subscriber里面发送onComplete()

1_J1kaUAzQKPEIUPXWDZXVyQ.png

假设我们从两个互不依赖的网络中获取数据,但希望将结果提供给同一观察者。

我们可以使用mergeWith

val disposable = firstNetworkCall()
    .mergeWith(secondNetworkCall())
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { it -> doSomethingWithIndividualResponse($it) }

这样,将观察来自firstNetworkCall的数据以及观察接下来的secondNetworkCall数据进行mergeWith,最后交于同一观察者观察。

3. 将网络请求组合在一起: zipWith

1_IS0nyKrPQssTePZzQXSV9g.png

有时,我们不希望将单个结果发送给观察者,而是希望将它们合并后再发送给观察者。 当我们不必担心观察者端等待和同步时,这将非常有用。

我们可以使用zipWith实现这一目标

val disposable = firstNetworkCall()
    .zipWith(secondNetworkCall(), 
        BiFunction{ 
          firstResonse: ResponseOneType, 
          secondResponse: ResponseTwoType -> 
          combineResult(firstResponse, secondResponse) })
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { it -> doSomethingWithCombinedResponse($it) }

与mergeWith非常相似,zipWith函数还接受第一个可观察的链接和第二个可观察的链接。 订阅后,它首先获得firstResponse,之后是secondResponse。 之后,使用BiFunction收集两个结果,然后可以将结果组合起来(例如,一个功能CombineResult),然后再将其传递给Observer。

这三种方式实现方式很不错,但是也有缺点

使用flatMap,mergeWith和zipWith,我们现在可以轻松地链接网络调用,然后再发送给使用它的观察者函数。
这很棒。 但是有一个缺点-它们仍然需要按顺序进行。 例如。 如果firstNetworkCall花费5秒,secondsecondNetworkCall花费5秒,则总过程为到达观察者之前的10秒。
对于场景1,这很有意义,因为一个依赖另一个。 但是对于方案2和3,应该可以同时调用两个网络调用。

查看以下内容,了解如何使其并发执行:

RxJava轻松实现并发的网络请求

译文链接:
https://levelup.gitconnected.com/rxjava-connecting-network-calls-made-easy-d7b406c9bc66

相关文章

网友评论

    本文标题:Rxjava使得网络请求变得如此简单

    本文链接:https://www.haomeiwen.com/subject/bbthgctx.html