RxJava Retrofit2 api 使用订阅或平面图的多次调用
RxJava Retrofit2 api multiple calls using subscribe or flatmap
我正在使用 Retrofit2 和 RxJava 进行 API 调用。问题是我想用从第一个 api 调用收到的响应(在本例中是一个整数)进行第二个 API 调用。我怀疑
Disposable subscribe(@NonNull Consumer<? super T> onSuccess, @NonNull Consumer<? super Throwable> onError)
方法和
<R> Single<R> flatMap(@NonNull Function<? super T, ? extends SingleSource<? extends R>> mapper
看起来可以使用第一个 api 调用的结果来调用第二个 api 调用。那么,我应该使用哪种方法,subscribe
或 flatMap
来进行第二次 api 调用并获得第一次调用的结果,为什么?我是否必须根据第一个 api 调用的结果是否可迭代来使用一个或另一个?
我想你想要这样的东西:
fun firstRequest(): Single<Int> = Single.just(10)
fun secondRequest(valueFromFirst: Int): Single<Int> = Single.just(valueFromFirst*2)
fun mappedRequest(): Single<Int> {
return firstRequest().flatMap {
secondRequest(it)
}
}
所以,现在您可以从任何地方访问 mappedRequest()。您可以通过以下方式“准备”您的请求:
val requestSingle = mappedRequest()
在这种情况下,您只有单曲。该请求尚未 运行ning,但已准备好 运行。要有效 运行 它:
requestSingle.subscribe { handleResult(it) }
我正在使用 Retrofit2 和 RxJava 进行 API 调用。问题是我想用从第一个 api 调用收到的响应(在本例中是一个整数)进行第二个 API 调用。我怀疑
Disposable subscribe(@NonNull Consumer<? super T> onSuccess, @NonNull Consumer<? super Throwable> onError)
方法和
<R> Single<R> flatMap(@NonNull Function<? super T, ? extends SingleSource<? extends R>> mapper
看起来可以使用第一个 api 调用的结果来调用第二个 api 调用。那么,我应该使用哪种方法,subscribe
或 flatMap
来进行第二次 api 调用并获得第一次调用的结果,为什么?我是否必须根据第一个 api 调用的结果是否可迭代来使用一个或另一个?
我想你想要这样的东西:
fun firstRequest(): Single<Int> = Single.just(10)
fun secondRequest(valueFromFirst: Int): Single<Int> = Single.just(valueFromFirst*2)
fun mappedRequest(): Single<Int> {
return firstRequest().flatMap {
secondRequest(it)
}
}
所以,现在您可以从任何地方访问 mappedRequest()。您可以通过以下方式“准备”您的请求:
val requestSingle = mappedRequest()
在这种情况下,您只有单曲。该请求尚未 运行ning,但已准备好 运行。要有效 运行 它:
requestSingle.subscribe { handleResult(it) }