Angular 8 - 如何使用 Promises 和 Async/Await [重复]

Posted

技术标签:

【中文标题】Angular 8 - 如何使用 Promises 和 Async/Await [重复]【英文标题】:Angular 8 - How to use Promises and Async/Await [duplicate] 【发布时间】:2019-12-21 23:45:31 【问题描述】:

我一直在尝试使用教程,但似乎无法弄清楚如何使用 Promises 或异步等待。

我有一个 http GET 请求,我想在返回之前等待 API 的结果。返回为 null 因为函数在 GET 发生之前返回。

HTTP 获取

get_UserAccess(practiceId: number, userId: number): UserAccess 
    var d: UserAccess;

    this.httpclient.get(this.URL).subscribe.(data => 
      d = data as UserAccess;
    );

    return d; //Keeps returning as null

调用组件

var userAccess = this.dataService.get_UserAccess(this.practice.practiceId, this.users[i].userId);
this.loadAccess(userAccess);

我尝试将 await 和 async 标记添加到 get 请求,但我不确定如何处理它返回到调用组件的承诺..

【问题讨论】:

@OnurArı 这不是 c#。不过谢谢! 独立于编程语言的想法是相同的。您对异步调用的理解是错误的,这就是它可以提供帮助的原因。 见前面提到的suggested duplicate。异步调用是编写/设计应用程序的常见且关键的构建块。了解如何在 javascript 中以及通过扩展 typescript 处理异步调用至关重要。了解这些核心概念将帮助您成为一名更好的程序员,并确保您不会一直在同一个问题上“磕磕绊绊”。 【参考方案1】:

您可以像这样使用await 运算符:

async getAsyncData() 
    this.asyncResult = await this.httpclient.get(this.URL).toPromise();
    console.log(this.asyncResult);

【讨论】:

【参考方案2】:

HTTP 获取

get_UserAccess(practiceId: number, userId: number): UserAccess 
return this.httpclient.get(this.URL); //Keeps returning as null

调用组件

async func()
var userAccess =await this.dataService.get_UserAccess(this.practice.practiceId, 
          this.users[i].userId).ToPromise();
this.loadAccess(userAccess);

注意每个调用 func() 的函数也应该带有异步签名。 祝你好运:)

【讨论】:

以上是关于Angular 8 - 如何使用 Promises 和 Async/Await [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Promises 和 Observables 有啥区别?

如何使用 Angular4 将网站下载为字符串?

Angular 2 “实时”更新对象。

我可以将 async/await Promises 与可观察的 RXJS 混合使用吗?

如何将 fs.createReadstream 与 fs.promises 一起使用

具有多个处理程序的 Angular Promise