我想檢查條件(數據在存儲器中可用還是從api獲取數據)是true/false,然後調用相應的函數,其結果是傳遞。檢查Observable和執行/返回函數的條件(angular2,rxjs)
現在,我正在檢查這個組件,但我想把它移到服務端。
service.ts
getData() {
// check source of data to return...
return this.hasLocal().subscribe((res) => {
if (res === 0) // no data in storage
return this.getRemote(); // <-- I want to return this
else
return this.getLocal(); // <-- or this to the component.
})
}
getRemote() {
console.log('getRemote()');
return this.api.get(this.apiEndpoint).map(
res => {
let resJson = res.json();
// save data to storage:
this.storage.set(this.storageName, JSON.stringify(resJson))
.then(() => console.log('Data saved in storage.'))
.catch(() => console.warn('Error while saving data in storage.'));
return resJson;
});
}
getLocal() {
console.log('getLocal()');
let promise = this.storage.get(this.storageName).then(res => {
return res;
});
return Observable.fromPromise(promise).map(res => {
return JSON.parse(res);
});
}
hasLocal() {
let promise = this.storage.length().then(res => res);
return Observable.fromPromise(promise).map(res => res);
}
GetData()
是所謂的組件,然後將結果寫入到陣列contacts
。
component.ts
loadData() {
this.contactsProvider.getData().subscribe(
contacts => {
console.log(contacts);
this.initializeData(contacts);
this.loader.dismiss();
}
);
}
這看起來不正確。可悲的是,我並不擅長觀察事件,但我認爲這裏的關鍵是RxJs方法之一,而不是訂閱中的邏輯if語句。必須有一些能夠使用反應模式來處理這種情況。 – cgTag