什么是正确的RxJava运营商做到这一点?

什么是正确的RxJava运营商做到这一点?

问题描述:

对于以下场景,什么是正确的RxJava运算符:什么是正确的RxJava运营商做到这一点?

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

我认为这应该与and/then/whenfilterflatMap的组合完成,但不知道如何。

+0

还要注意的是'cache'可以成为一个网络的高速缓存有助于观察到的请求例。 –

有很多方法可以解决这个问题。另一种通用解决方案是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(); 

您将需要两个observables为您的情况。如果令牌存在于本地存储器concat中,则不会订阅网络可观察值。更多信息在博客文章。

代码示例this blog post

我不知道如果这是您寻找的是,但结构应该很简单

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