我正在尝试限制应用程序中不必要的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);
我想要实现的是以某种方式将数据存储在服务本身上(这样我就可以在整个应用程序中使用该数据,而无需单独对每个组件发出请求,但我也想知道何时接收到该数据通过组件(我通常通过订阅)。
答案 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);
}
}
}