什么是正确的RxJava运算符?

时间:2016-08-04 14:18:42

标签: rx-java rx-android

以下场景的正确RxJava运算符是什么:

我想检查是否存储了令牌,如果没有从网络获取令牌并使用它来执行其他网络请求。

我认为应该使用and/then/whenfilterflatMap的组合,但不确定如何。

2 个答案:

答案 0 :(得分:2)

有很多方法可以解决这个问题。一个更通用的解决方案是mediaId

Observable.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(); 中,则不会订阅网络可观察对象。博客文章中的更多信息。

来自this blog post的代码示例。

答案 1 :(得分:1)

我不知道这是不是你要找的,但结构化应该很简单

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