什么是正确的RxJava运营商做到这一点?
问题描述:
对于以下场景,什么是正确的RxJava运算符:什么是正确的RxJava运营商做到这一点?
我想检查是否有令牌存储,如果没有从网络获取并使用它来执行另一个网络请求。
我认为这应该与and/then/when
或filter
和flatMap
的组合完成,但不知道如何。
答
有很多方法可以解决这个问题。另一种通用解决方案是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")
还要注意的是'cache'可以成为一个网络的高速缓存有助于观察到的请求例。 –