Búsqueda de sitios web

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í.