【问题标题】:Use promise with async [duplicate]将 promise 与异步一起使用 [重复]
【发布时间】:2019-11-10 13:21:33
【问题描述】:

我想使用Promise 获取Object。 下面是方法:

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 对象]

您对解决这个问题有什么想法吗?非常感谢。

【问题讨论】:

  • this.getUri().then(uri =&gt; console.log('-----Result:' + uri)) 或者你需要await this.getUri()
  • 您好@AlexanderStaroselsky 先生,感谢您的回复我尝试了console.log(this.getUri().then(uri =&gt; console.log('-----Result:' + uri)));,但是,我得到了inside =&gt; [object Object] outside =&gt; [object Object] -----Result:undefined

标签: angular angular6


【解决方案1】:

您的代码在 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)
  }

【讨论】:

  • 您好 @Abdurahman 先生,感谢您的回复,但是当我在 ngOnInit() 上调用 this.getUri() 时,我收到了 -----Result: [object Promise] inside =&gt; [object Object] outside =&gt; [object Object]
  • 然后尽量不要将其转换为Profession[],直到您确定您的API 为您提供了可以转换为的结果
  • 查看更新的答案并告诉我打印的内容
  • 您好@Abdulrahman 先生,我尝试了您的提议。我得到了--------------[object Promise] inside =&gt; [object Object] outside =&gt; [object Object]
  • 这个网址得到了{ "id": 2, "libelle": "Engineer", "selected": false }
【解决方案2】:

您需要使用await 等待promise 解决。

你需要在你的console.logawaitthis.userService.getOrders();this.getUri()

所以你的console.log 应该是这样的:

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

【讨论】:

  • 您好@Viqas 先生,感谢您的回复。我尝试了async getUri() {var data = await this.userService.getOrders();} 并在 ngOnInit() 上调用了console.log("--------------" + this.getUri());,我得到了--------------[object Promise]
  • 我的意思是你还需要在你的 console.log 中等待,看看我更新的答案。
  • 谢谢先生,getUri 是异步的,所以我得到了await is only allowed within an async function
  • 然后将呼叫移至this.getUri(),然后记录该值。请参阅我的更新答案。
  • 我得到了同样的错误,先生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 2018-07-03
相关资源
最近更新 更多