Как ждать выполнения метода - PullRequest
0 голосов
/ 12 октября 2018

У меня есть два метода, и я хочу дождаться результата перед выполнением кода Furder.Я пытаюсь с асинхронным перед именем функции и жду перед GetNavigationData (), но безрезультатно.Я также пытаюсь напечатать значения, чтобы увидеть, что происходит, и ожидаемые данные должны быть:

Метод API

Обычный метод

Но это результаты: enter image description here

getFlatNavigation(navigation) {
  if (this.navigation.length == 0) {
    console.log(this.GetNavigationData());
    console.log('Regular method');
  }
}

GetNavigationData() {
  let applicationMenuData = new InitializeAppRequest();
  this.http.post(this.appGlobal.BASE_SERVER_ADDRESS + 'api/AppServer/InitializeApp', applicationMenuData).subscribe((res) => {
    console.log('API method');
    return res['AplicationMenuData'];
  });
}

Как получить ожидаемые результаты?

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

async / await требует от вас использования Promise, но поскольку Angular перешел на Observables, вы можете просто использовать этот синтаксис вместо этого.

Вы можете вернуть Observable из GetNavigationData метод, а затем подписаться на него в getFlatNavigation, где вы звоните GetNavigationData

getFlatNavigation(navigation) {
  if (this.navigation.length == 0) {
    this.GetNavigationData()
      .subscribe(res => {
        console.log(res);
        console.log('Regular method');
      })
  }
}

GetNavigationData() {
  let applicationMenuData = new InitializeAppRequest();
  return this.http.post(this.appGlobal.BASE_SERVER_ADDRESS + 'api/AppServer/InitializeApp', applicationMenuData)
  .pipe(
    map(res => {
      console.log('API method');
      return res['AplicationMenuData'];
    })
  );
}
0 голосов
/ 12 октября 2018
async getFlatNavigation(navigation) {
  if (this.navigation.length == 0) {
    console.log(await this.GetNavigationData());
    console.log('Regular method');
  }
}

async GetNavigationData() {
  let applicationMenuData = new InitializeAppRequest();
  this.http.post(this.appGlobal.BASE_SERVER_ADDRESS + 'api/AppServer/InitializeApp', applicationMenuData).subscribe((res) => {
    console.log('API`enter code here` method');
    return res['AplicationMenuData'];
  });
}
0 голосов
/ 12 октября 2018

Вы можете использовать async / await

async getFlatNavigation(navigation) {
  if (this.navigation.length == 0) {
    console.log(await this.GetNavigationData());
    console.log('Regular method');
  }
}

GetNavigationData() {
  let applicationMenuData = new InitializeAppRequest();
  return this.http
    .post(this.appGlobal.BASE_SERVER_ADDRESS + 'api/AppServer/InitializeApp', applicationMenuData)
    .pipe(
      map((res) => {
        console.log('API method');
        return res['AplicationMenuData'];
      })
    )
    .toPromise();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...