Angular асинхронная функция - PullRequest
0 голосов
/ 23 апреля 2020
  async onRegister(formRegister) {

    this.nbotoncito = false;
    this.spinner.show();

    if (this.ejercicio.idArea == "2") {
      console.log("ejercicios de fisica");
      await this.getTotalFisica();

    } else {
      console.log("cualquier cosa ajena a fisica");
      await this.getEjercicios_SubArea();

    }
  }


  async getTotalFisica() {

    await this.ejercicioService.getEjercicioTotalFisica().subscribe(
      res => {
         this.ejercicioTotal =   res;
        console.log("Respuesta del total de los ejercicios por FISICA: " + res);
      },
      err => console.log(err),
    );
  }

Перед выполнением других действий в моем onRegister У меня должен быть тот массив упражнений Total Loaded, что метод getTotalPhysics исходит из бэкэнда размещенная в heroku функция выглядит следующим образом:

  getEjercicioTotalFisica(): Observable<EjercicioInterface[]> {
    console.log("Solcitando los ejercicos de fisica");
    return this.http.get<EjercicioInterface[]>(`${this.BASE_URL}/exercise/fisica`);
  }

У меня должен быть обязательный набор упражнений Total и необходимо, прежде чем выполнять какие-либо действия в onRegister, и сначала перед этим выполняется подписка в onRegister. getTotalExercises.

Я не получаю ошибок, я просто ищу , чтобы заполнить этот массив перед любым действием

1 Ответ

1 голос
/ 23 апреля 2020

Я думаю, что вы смешиваете обещания и Observables.

Конвертируйте Observable в обещание:

async getTotalFisica() {
  try {
    this.ejercicioTotal = await this.ejercicioService.getEjercicioTotalFisica().toPromise();
  } catch (err) {
     console.log(err),
  }
}

(обратите внимание на .toPromise() в конце)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...