Angular 8 - 如何使用 Promises 和 Async/Await

9

我一直试着使用教程,但似乎无法弄清楚如何使用Promise或async await。

我有一个http GET请求,想要在返回结果之前等待API的响应。由于函数在GET请求执行之前就已经返回,因此返回值为null。

HTTP GET

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);

我尝试在get请求中添加await和async标签,但是我不确定如何处理它返回给调用组件的promise。


1
@OnurArı,这不是C#语言。还是谢谢你! - Justiciar
无论编程语言如何,其思想都是相同的。你对异步调用的理解是错误的,这就是为什么它能够帮助的原因。 - Onur Arı
请参考上述建议的重复问题。异步调用是编写/设计应用程序的常见且关键的构建块。了解如何在JavaScript和TypeScript中处理异步调用至关重要。理解这些核心概念将有助于您成为更好的程序员,并确保您不会在同一个问题上一再犯错。 - Igor
2个回答

14

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

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

5

HTTP GET

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()的每个函数也应该具有异步签名。 祝你好运 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接