角 – rxjs替代做Promise.resolve?
发布时间:2020-12-17 07:37:53 所属栏目:安全 来源:网络整理
导读:我有一个角色2服务的功能,它从api获取一些数据.第一次获取后,我希望缓存数据.我得到它这样工作: import {Injectable} from 'angular2/core';import {Http} from 'angular2/http';import {Observable} from 'rxjs/Observable';import 'rxjs/add/operator/map
我有一个角色2服务的功能,它从api获取一些数据.第一次获取后,我希望缓存数据.我得到它这样工作:
import {Injectable} from 'angular2/core'; import {Http} from 'angular2/http'; import {Observable} from 'rxjs/Observable'; import 'rxjs/add/operator/map'; import 'rxjs/add/observable/fromPromise'; @Injectable() export class ForumService { groups: any; constructor(private http: Http) {} getGroupDictionary() { var me : ForumService = this; if (me.groups) { // todo: there has to be a cleaner way ... return Observable.fromPromise(Promise.resolve(me.groups)); } return this.http.get('/api/groups').map(res => { me.groups = res.json(); return me.groups; }); } } 当数据被缓存时,我以一种愚蠢的方式返回,依赖于我从承诺中所知道的: return Observable.fromPromise(Promise.resolve(me.groups)); 这样做的正确方法是什么? 编辑:下面的anwser是对这个具体问题的有效答案,但显然有一个.cache()方法,正是我想要的: import {Injectable} from 'angular2/core'; import {Http} from 'angular2/http'; import {Observable} from 'rxjs/Observable'; import 'rxjs/add/operator/map'; @Injectable() export class ForumService { groups: Observable<Groups>; constructor(private http: Http) {} getGroupDictionary(): Observable<Groups> { if (!this.groups) { this.groups = this.http.get('/api/groups').cache().map(res => res.json()); } return this.groups; } }
Observable.of是你正在寻找(见
this plunk):
// you might need to add this line for "Observable.of()" import 'rxjs/add/observable/fromArray'; if (me.groups) { return Observable.of(me.groups); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |