Rx java 什么是正确的RxJava操作符来执行此操作?

Rx java 什么是正确的RxJava操作符来执行此操作?,rx-java,rx-android,Rx Java,Rx Android,对于以下场景,什么是正确的RxJava操作符: 我想检查是否存储了令牌,如果没有,则从网络获取令牌并使用它执行另一个网络请求 我认为应该用和/then/when或者结合过滤器和平面地图来完成,但不确定如何完成。解决这个问题的方法有很多。另一个通用解决方案是可观察的.concat // Our sources (left as an exercise for the reader) Observable<Data> memory = ...; Observable<Data&

对于以下场景,什么是正确的RxJava操作符:

我想检查是否存储了令牌,如果没有,则从网络获取令牌并使用它执行另一个网络请求


我认为应该用
和/then/when
或者结合
过滤器
平面地图
来完成,但不确定如何完成。

解决这个问题的方法有很多。另一个通用解决方案是
可观察的.concat

// Our sources (left as an exercise for the reader)
Observable<Data> memory = ...;  
Observable<Data> disk = ...;  
Observable<Data> network = ...;

// Retrieve the first source with data
Observable<Data> source = Observable  
  .concat(memory, disk, network)
  .first();
//我们的资料来源(留给读者作为练习)
可观察记忆=。。。;
可观测圆盘=。。。;
可观测网络=。。。;
//使用数据检索第一个源
可观测源=可观测
.concat(内存、磁盘、网络)
.first();
您的案例需要两个可观察对象。如果令牌存在于本地存储器
concat
中,则不会订阅可观察的网络。更多信息在博客帖子中


来自的代码示例。

我不知道这是否是您正在寻找的,但结构应该非常简单

  Observable.just(getToken())
      .filter(token->Strings.isNullOrEmpty(token))
      .map(this::findNewToken)
      .cache() 
      .subscribe(token -> println("Your new Token")

还要注意,
cache
有助于缓存网络请求的可观测数据。