以类似队列的方式使用RxJava并暂停/启动队列

问题描述 投票:1回答:1

我正在尝试在Android应用程序中使用RxJava以及Retrofit与RESTful API进行交互。

在我的Android应用中,我在各种UX事件中发出了许多请求。如果其中一个请求返回“无效令牌”错误,我想暂停所有其他在开始之前排队的请求,以便我可以续订用户的令牌,然后恢复已暂停的请求。

使用RxJava是否可以?我正在学习图书馆,但是找不到此功能。

谢谢,

android retrofit rx-java retrofit2 rx-java2
1个回答
0
投票

如果这些请求是并行发送的,那么您可能会收到多个“无效令牌”错误。您只想为错误的第一个实例刷新令牌。要在刷新令牌时暂停请求,请考虑可观察到的有效令牌的来源。

假设您有一个具有方法的网络处理类:

Single<Response> makeNetworkRequest(Request request) { ... }
Single<Boolean> getToken() { ... }

实现的目的是当令牌可用时发出一个值,但否则要等到令牌被刷新。

然后,您的观察者链看起来像:

observerChain
  .flatMapSingle(request -> networkHandler.makeNetworkRequest(request)
       .retryWhen(error -> error.flatMapSingle(e -> networkHandler.getToken()))
  ...

retryWhen()运算符通过提供一个可观察值从错误中恢复,该观察值在非空时将重新订阅上游可观察值,在这种情况下为makeNetworkRequest()

由于您没有显示要改编的任何代码,因此您必须对上面的代码进行调整,才能使其与您的应用程序一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.