Ожидание не ждет завершения функции - PullRequest
1 голос
/ 08 октября 2019

Итак, я делаю какую-то работу, где пользователь может сделать надпись на уроке гимнастики, который имеет «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();
  }
...