异步使用promise

时间:2019-06-28 15:13:16

标签: angular angular6

我想使用Object获得Promise。 波纹管,是方法:

async getUri()
  {
      var data = this.userService.getOrders();
      var outside_uri = await data.then((uri) => { console.log('inside => ' + uri); return uri;})
      console.log('outside => ' + outside_uri)
  }

其中

getOrders(): Promise<Profession[]>
    {
        return this.http.get<Profession[]>(`${this.baseUrl}/users/professions/id/2`)
                        .toPromise()
                        .then((response) => response);
    }

但是当我像这样在 ngOnInit()上调用此方法时:

console.log("-----Result: " + this.getUri());

它产生:

  

-----结果:[对象承诺]

     

inside => [object Object]

     

outside => [object Object]

您是否对解决该问题有任何想法?非常感谢。

2 个答案:

答案 0 :(得分:0)

您需要使用await来等待诺言解决。

您需要在awaitthis.userService.getOrders(); this.getUri()console.log

所以您的console.log应该如下所示:

var uri = await this.getUri()
console.log("-----Result: " + uri);

答案 1 :(得分:0)

您的代码在getOrders函数中犯了一个小错误,因为您正在方法的主体内解决诺言,并且函数希望您得到诺言

因此,请修改您的代码以使其符合以下条件

getOrders(): Promise<any>
    {
        return this.http.get(`${this.baseUrl}/users/professions/id/2`)
                        .toPromise();
    }

async getUri()
  {
      let data = this.userService.getOrders();
      let outside_uri;
      await data.then((uri) => { 
           console.log('inside => ' + uri); 
           outside_uri = uri;
        })
      console.log('outside => ' + outside_uri)
  }