我希望得到这样的东西: 我有生成observable的请求,并且我有一种可以成为行为主题的内存缓存。在我的代码中,我想以某种方式合并这两个observable,如果主题有一些数据我想要采取这些并且不要开始请求可观察。这样的事情可以实现吗?
目前我正在做这样的事情:
val resp = run { run(Task.GetMessages()) }
return InboxModel(news = Observable.merge(IoImplementation.cachedUserMessages(), resp).distinctUntilChanged())
但我不认为这很好
答案 0 :(得分:0)
听起来你想尝试在缓存中找到可观察的工作,只有当它是空的然后才能尝试做真正的工作。 observable.switchIfEmpty(Observable)
运算符应该满足您的需求。如果您的缓存可观察为空,那么它将订阅实际工作可观察。
public void handleRequests(Observable<Request> requests) {
requests.flatMap(Request r -> {
String key = r.getSomeCacheKey();
return getFromCache(key)
.switchIfEmpty(doRealWork(r)
.doOnNext(saveToCache(key))
);
})
.subscribe((String response) -> System.out::println);
}
// hashmap based cache may not be what you want but i'm
// including it for completeness of example
Map<String, Observable<String>> cache = //...
Observable<String> getFromCache(String key) {
return cache.get(key);
}
Action1<String> saveToCache(String key) {
return (String response) -> cache.put(key, response);
}
Observable<String> doRealWork(Request someRequest) {
// imagine real work here
return Observable.just("some response");
}