以下场景的正确RxJava运算符是什么:
我想检查是否存储了令牌,如果没有从网络获取令牌并使用它来执行其他网络请求。
我认为应该使用and/then/when
或filter
和flatMap
的组合,但不确定如何。
答案 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")