如何等待方法执行

时间:2018-10-12 12:06:36

标签: angular rest typescript api

我有两种方法,我想在执行进一步的代码之前等待结果。 我尝试在func名称之前使用async并在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 :(得分:1)

您可以使用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();
}

答案 1 :(得分:0)

async / await要求您使用Promise,但是由于Angular继续使用Observables,因此您可以简单地使用该语法。

您可以从Observable方法返回一个GetNavigationData,然后在您调用getFlatNavigation的{​​{1}}中进行订阅

GetNavigationData

答案 2 :(得分:0)

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'];
  });
}