首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Observable<Observable<any>>压平成Observable<any>?

如何将Observable<Observable<any>>压平成Observable<any>?
EN

Stack Overflow用户
提问于 2018-06-07 11:31:31
回答 1查看 1.4K关注 0票数 1

我试图通过以下操作获得一个Observable<MyType>

代码语言:javascript
复制
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>>

如何将来自服务器的结果扁平化,以便返回一个可观察到的结果,只在必要时调用服务器?

EN

回答 1

Stack Overflow用户

发布于 2018-06-07 11:36:05

您可以这样使用mergeMap和Observable.of:

代码语言:javascript
复制
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();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50740106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档