У меня есть приложение 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);
});
});
}