我试图通过以下操作获得一个Observable<MyType>:
return this.cache.get<MyType, number>(storageName, version)
.map(cached => {
if (cached !== undefined) {
return cached;
}
return this.http.get<MyType>(`MyTypeGetUrl/${version}`)
.map(m => m)
.do(result => {
this.cache.put<MyType>(storageName, result).first().subscribe();
});
}).publishReplay(1).refCount();cache.get返回Observable<MyType>,http.get<T>返回Observable<T>。
我希望检查对象的缓存,如果它不存在,从服务器获取它,缓存它并返回它。
但是,如果对象存在于缓存中,则返回Observable<MyType>,但如果需要转到服务器,则返回Observable<Observable<MyType>>。
如何将来自服务器的结果扁平化,以便返回一个可观察到的结果,只在必要时调用服务器?
发布于 2018-06-07 11:36:05
您可以这样使用mergeMap和Observable.of:
return this.cache.get<MyType, number>(storageName, version)
.mergeMap(cached => {
if (cached !== undefined) {
return Observable.of(cached);
}
return this.http.get<MyType>(`MyTypeGetUrl/${version}`)
.map(m => m)
.do(result => {
this.cache.put<MyType>(storageName, result).first().subscribe();
});
}).publishReplay(1).refCount();https://stackoverflow.com/questions/50740106
复制相似问题