Как получить ответ от провайдера - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть приложение Ionic с провайдером, который сохраняет данные в базу данных sqlite. Я хотел бы получить возвращаемое значение от этого провайдера и предупредить его в моем home компоненте. Если я сделаю свое предупреждение в самом провайдере, я получу данные успешно сохранены или ошибки. Но если я попытаюсь передать его компоненту home, я не получу возвращенное значение. Пожалуйста, смотрите мои коды ниже.

DataService

saveData(data:any): Observable<string> {
    var statusMessage;
    var saveDataScript = 'INSERT INTO lcs VALUES(NULL, ?, ?, ?, ?, ?, ?)';

    this.sqlite.create({
      name: 'lcs.db',
      location: 'default'
    }).then((db: SQLiteObject) => {
      db.executeSql(saveDataScript, [data.entry_plaza, data.exit_plaza, 
          data.vehicle_class, data.user_badge, data.scan_time, data.toll_fee])
          .then(res => {
            statusMessage = 'Data saved.';
          })
          .catch(e => {
            statusMessage = 'Error in saving: ' +e;
          })
    })
    .catch(e => {
      statusMessage = 'Error in checking database: ' +e;
    })

    return statusMessage;
  }

home.ts

saveTicket(obj: any) {
    var preparedData: any = {
        entry_plaza: obj.entryplaza,
        exit_plaza: obj.exitplaza,
        vehicle_class: this.tellerClass,
        user_badge: this.userInfo.badge,
        scan_time: new Date().toLocaleString(),
        toll_fee: obj.toll,
    }

    this.dataService.saveData(preparedData).subscribe((reply) => {
        this.presentDataAlert(reply);
    });
}

С вашей помощью мне удалось придумать этот рабочий код:

saveData(data: any): Promise<string> {
    return new Promise((resolve, reject) => {

  var statusMessage;
  var saveDataScript = 'INSERT INTO lcs VALUES(NULL, ?, ?, ?, ?, ?, ?)';

  this.sqlite.create({
    name: 'lcs.db',
    location: 'default'
  }).then((db: SQLiteObject) => {
    db.executeSql(saveDataScript, [data.entry_plaza, data.exit_plaza,
    data.vehicle_class, data.user_badge, data.scan_time, data.toll_fee])
      .then(res => {
        statusMessage = 'Data saved.';
        resolve(statusMessage);
      }).catch(e => {
        statusMessage = 'Error in saving: ' + e;
        resolve(statusMessage);
      });
  }).catch(e => {
      statusMessage = 'Error in checking database: ' + e;
      resolve(statusMessage);
    });
});

}

1 Ответ

0 голосов
/ 30 апреля 2018
saveData(data: any): Observable<string> {
    var statusMessage;
    var saveDataScript = 'INSERT INTO lcs VALUES(NULL, ?, ?, ?, ?, ?, ?)';

    const promise = new Promise((resolve, reject) => {
      this.sqlite
        .create({
          name: 'lcs.db',
          location: 'default'
        })
        .then((db: SQLiteObject) => {
          db.executeSql(saveDataScript, [data.entry_plaza, data.exit_plaza,
            data.vehicle_class, data.user_badge, data.scan_time, data.toll_fee])
            .then(res => {
              resolve('Data saved.')
            })
            .catch(e => {
              reject('Error in saving: ' + e)
            })
        })
        .catch(e => {
          reject('Error in checking database: ' + e)
        })
    })
    return Observable.fromPromise(promise);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...