我有一个角色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); }