promesas de Angular 2 en la comunicación con SQLite
Estoy implementando una comunicación Angular 2 con SQLite a través de 3 capas. Tuve problemas con las promesas al devolver y traté de resolverlo de la siguiente manera.
1.Servicio Externo(routerService.ts)
routerService(reqObject): Observable<any> {
this.dbServiceProvider.dbService(reqObject).subscribe(dbServiceResponse => {
console.log("data fetched", dbServiceResponse);
});
}
2. dbService.ts
dbService(requestObj): Observable<any> {
let tableSchema: any[] = [];
this.databaseprovider.getTableInfo(requestObj.tableName).subscribe(data => {
console.log(data);
if (data.rows.length > 0) {
for (var i = 0; i < data.rows.length; i++) {
tableSchema.push(data.rows.item(i).name);
}
}
console.log(tableSchema);
requestObj['tableSchema'] = tableSchema;
return requestObj;
})
3. database.ts
//Getting column Names
getTableInfo(tbl): Observable<any> {
let query = 'PRAGMA table_info(' + tbl + ');';
return Observable.of(this.database.executeSql(query, [])).map(data => {
console.log("got Pragma", data);//here i am getting object with Zone values
return data;
}, err => {
console.log('Error: ', err);
return err;
});
}
Aquí, si no estoy usando Observable.of(), no está esperando la ejecución de SQL. Y ahora el problema es que está devolviendo un objeto con 'valores de zona'. Por lo tanto, no puedo recuperar datos del objeto devuelto.
Estoy buscando una solución con promesas u observables para ejecutar estos 3 servicios.
Respuesta #1
async getTableInfo(tbl): Observable<any> {
let query = 'PRAGMA table_info(' + tbl + ');';
let res = <any>await this.database.executeSql(query, []);
if (res.rows.item(0))
return of(res.rows.item(0))
else of([])
}
Nota: No estoy detectando el error aquí.
