[英]Angular4 Rxjs Observable Limit Backend HTTP Requests
我試圖限制應用程序中不必要的HTTP調用的數量,但是每次我訂閱Observable時,都會向服務器發出請求。 有沒有一種方法可以訂閱可觀察對象而不觸發http請求? 我在服務中觀察到的情況如下:
getServices(): Observable<Service[]> {
return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err);
}
然后在我的組件中,我訂閱了這樣的可觀察對象:
this.serviceService.getServices().subscribe(services => this.services = services);
我想要實現的是將數據以某種方式存儲在服務本身上(這樣我就可以在整個應用程序中使用該數據,而不必分別對每個組件進行請求,但是我也想知道組件何時接收到該數據(我通常通過訂閱來完成)。
不知道我是否正確理解了您的問題,但似乎您想在服務中緩存第一個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);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.