Angular4 Rxjs Observable Limit后端HTTP请求

时间:2017-05-27 20:29:10

标签: javascript angular http rxjs

我正在尝试限制应用程序中不必要的HTTP调用的数量,但每次订阅Observable时都会向服务器发出请求。有没有办法在不触发http请求的情况下订阅一个observable?我在服务中的观察结果如下:

getServices(): Observable<Service[]> {
    return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err);
}

然后在我的组件中,我订阅了这样的observable:

this.serviceService.getServices().subscribe(services => this.services = services);

我想要实现的是以某种方式将数据存储在服务本身上(这样我就可以在整个应用程序中使用该数据,而无需单独对每个组件发出请求,但我也想知道何时接收到该数据通过组件(我通常通过订阅)。

1 个答案:

答案 0 :(得分:0)

不确定我是否正确理解了您的问题,但似乎您希望在服务中缓存第一个HTTP请求的结果,因此如果第一个组件获取数据,则第二个组件(另一个订阅者)将检索缓存数据。如果是这种情况,请在模块级别声明服务提供者,以便Angular创建单个对象。然后在服务内部创建一个var,它在第一次检索后存储数据。

@Injectable()
export class DataService{

    mydata: Array<string>[];

    constructor(private http:Http){}

    getServices(): Observable<string[]> {
        if (this.mydata){
            return Observable.from(this.mydata);  // return from cache
        } else
        {
            return return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err);
        }
    }
}