Итак, я делаю какую-то работу, где пользователь может сделать надпись на уроке гимнастики, который имеет «x» свободных мест (например, 15). После завершения надписи доступные места уменьшаются на 1. Проблема, с которой я сталкиваюсь, заключается в том, что после надписи свободные места не уменьшаются сразу.
Мой код такой:
Служба подписи
inscripcionAClase(clase, username) {
var nuevaInscripcion = {
id: clase._id,
username: username
};
this.postInscripcion(nuevaInscripcion)
.subscribe((data: any) => {
alert('Inscripto con exito!');
}, error => {
console.log(error);
});
}
Служба GET CLASSES
async obtenerListadoClases(categoria) {
var clasesDB;
await this.getClases(categoria).toPromise().then((resp: any) => {
clasesDB = resp.clasesDB;
})
return clasesDB;
}
Использование службы GET CLASSES
async obtenerClases(categoria) {
this.listadoClases = await this.claseServicio.obtenerListadoClases(categoria);
console.log(this.listadoClases, 'obtengo listado');
}
ALERT CONTROLLER
async inscripcionAlert(clase) {
const alert = await this.alertController.create({
header: 'Atención',
message: 'Confirme para inscribirse a la clase',
buttons: [
{
text: 'Aceptar',
handler: async () => {
await this.inscripcionServicio.inscripcionAClase(clase, this.username); // **Works fine**
await this.obtenerClases(this.categoria) // **Classes are not refreshing after the inscription is made**
}
}, {
text: 'Cancelar'
}
]
});
await alert.present();
}
Одна вещь, которую я заметил, - если я напишу свой класс контроллера предупреждений следующим образом (с setTimeOut в get классах), он работаетв совершенстве. Так что я думаю, что это проблема задержки с обещаниями, но я раньше использовал ключевое слово await, но он не выполняет функцию «await».
async inscripcionAlert(clase) {
const alert = await this.alertController.create({
header: 'Atención',
message: 'Confirme para inscribirse a la clase',
buttons: [
{
text: 'Aceptar',
handler: async () => {
await this.inscripcionServicio.inscripcionAClase(clase, this.username);
setTimeout(() => {
this.obtenerListadoClases(this.categoria)
}, 2500);
}
}, {
text: 'Cancelar'
}
]
});
await alert.present();
}