簡體   English   中英

Angular4 Rxjs可觀察的限制后端HTTP請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM