我正在尝试实现离线模式,我已经做了这样的事情。
在我的Page.ts
文件中
getnews() {
this._newsservice.GetNews(this.NewsFilterOptions).subscribe(res => {
this.newsArray = res;
this.loadingnews = false;
},
err => {
this.loadingnews = false;
},
() => {
});
}
在我的Service
文件中
GetNews(FilterOptions: any) {
return this.utilitiesService.Get("news" + this.QueryBuilder(FilterOptions));
}
我的Utilities
文件
public Get(endUrl: string) :Observable<any> {
if (this._AppConfig.IsOnline) { // If Online Get From Server
...
return this.http.get(this.baseUrl + endUrl, options)
.map(response => {
//SAVE HTTP RESPONSE TO DICTIONARY
this._OfflineService.Set(this.baseUrl + endUrl, response);
return response.json()
});
}
else {
this._OfflineService.Get(this.baseUrl + endUrl).then(val => {
return Observable.of(val).map(o => o.json());
}).catch((err) => {
return Observable.throw("ERROR");
});
// FETCH HTTP RESPONSE FROM DICTIONARY
//return Observable.of(Data).map(o => o);
}
}
离线Service
:我正在使用离子LocalStorage
。
Get(endUrl: string) {
// Or to get a key/value pair
return this.storage.get(endUrl);
}
Set(endUrl: string , data: any) {
// Or to get a key/value pair
this.storage.set(endUrl,data).then((val) => {
});
}
现在在线模式工作正常,但是当应用程序离线时,我得到 无法读取未定义的属性subscribe
,尽管我返回可观察的。
使用Observable.fromPromise
.
在您的Get()
函数中,else部分:
return Observable.fromPromise(this._OfflineService.Get(this.baseUrl + endUrl))
.map(val => val.json())
.catch((err) => {
return Observable.throw("ERROR");
});
这会将承诺转换为可观察量,您可以使用map
来解析 json 并最终订阅。