我已经创建了一个Ionic3移动应用程序,现在我正试图使其脱机工作。 为此,我使用HttpInterceptor拦截所有GET&POST服务,并将数据保存在设备上的SQLite DB中(工作正常)。
当我尝试从拦截器中获取数据并将数据返回给调用组件时,就会出现问题。在检测到没有连通性时,我打了一个查询('SELECT * FROM offline WHERE URL =?')以获取已保存在数据库中的GET数据。我可以管理数据,但不能将其返回给调用组件。我尝试返回数据,但是它不起作用。
下面是我的拦截器代码,欢迎提供任何有关它的指导/帮助。
if(this.network.type == 'none' || this.network.type == 'unknown'){
console.log("NO Network !!");
// return next.handle(req).do((event: HttpEvent<any>) => {
if(req.method == 'GET'){
let data;
console.log("OFFLINE GET URL ", req.url);
this.db.executeSql('SELECT * FROM offline WHERE URL = ? ', [req.url])
.then( (data) => {
this.offlineData = [];
for(var i=0; i < data.rows.length; i++) {
this.offlineData.push({id: data.rows.item(i).ID, Type: data.rows.item(i).TYPE, URL: data.rows.item(i).URL, Data: data.rows.item(i).DATA, Priority: data.rows.item(i).PRIORITY})
if(this.offlineData[i].Data !== null && this.offlineData[i].Data !== undefined && this.offlineData[i].Data !== 'undefined'){
this.offlineData[i].Data = JSON.parse(this.offlineData[i].Data);
}
}
data = this.offlineData[0].Data;
// return this.offlineData[0].Data;
return (data instanceof Observable) ? data : Observable.of(data.clone());
})
.catch((e) => {
console.log('OFFLINE DATA 2 ERROR', e);
});
// return (data instanceof Observable) ? data : Observable.of(data.clone());
} else if(req.method == 'POST'){
// Do Something
}
}