我有一個角2服務。 現在,我必須從服務器獲取一些對象,只要它們不存在。如何僅在第一次獲取數據時才發送http請求?
因此,我第一次做一個http請求,然後將數據存儲在服務中定義的變量中。對於後續的請求,我只是從變量傳遞數據。
什麼是在angular 2 style
與Observables
做到這一點的理想方法。
我有一個角2服務。 現在,我必須從服務器獲取一些對象,只要它們不存在。如何僅在第一次獲取數據時才發送http請求?
因此,我第一次做一個http請求,然後將數據存儲在服務中定義的變量中。對於後續的請求,我只是從變量傳遞數據。
什麼是在angular 2 style
與Observables
做到這一點的理想方法。
包裝你http請求成可注射的服務,並使用副作用操作者做(),例如,
@Injectable()
export class DataService{
mydata: Array[];
constructor(private http:Http){}
loadData(): Observable | any {
if (this.mydata){
return this.mydata; // return from cache
} else
{
return this.http.get("./mydata.json")
.map(res => res.json())
.do(data => this.mydata = data);
}
}
}
從組件調用loadData()。它只會在mydata爲空時發出http請求。
你可以這樣做:
observable.first().subscribe(yourFunc);
這隻會調用一次訂閱功能。
但是用這種方法,返回類型是不同的。在那種情況下,我的調用函數將如何決定它是訂閱observable還是會獲得數組? –
如果您願意,可以將數組轉換爲Observable: return Observable.from(this.mydata) –