在构造函数或 ngOnInit 中加载异步函数

San*_*iac 6 promise async-await typescript angular

我想在构造函数或 ngOnInit() 中调用异步函数 readUsers()。虽然我从这里使用了推荐的 workaraound,但它仍然被延迟并且不会等待执行。

TypeScript 中的异步构造函数?

如何延迟/等待我的 readUsers() 函数的执行?

users: any[];

ngOnInit() {
    this.readUsers();
    //this.readUsers(); above is called delayed so this.users below is 
    //undefined
    console.log(this.users);
}


public readUsers = async () =>  {
    this.users = await this.userService.getUsers()
    .then(resolve=>{
        console.log("within async function");
        return resolve;
    })
    .catch(reject=>{
        return [];
    })
}


////////userService.getUsers() reads JSON Object from an endpoint (works!)
getUsers(): Promise<any> {
    return new Promise((resolve, reject) => {
        this.http
            .get('https://url.com/users/')
            .subscribe(users => {
                if (!users) {
                    reject([]);
                }
                resolve(users);
            });
    });
}
Run Code Online (Sandbox Code Playgroud)

由于没有等待,console.log 被切换:

不明确的

在异步函数中

Pav*_*vlo 5

interface OnInit {
  ngOnInit(): void
}
Run Code Online (Sandbox Code Playgroud)

当某些东西返回空值时,您通常可以将其转换为 Promise 而没有任何副作用

async ngOnInit(): Promise<void> {
    await this.readUsers();
    console.log(this.users);
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然上面的代码有效,但不推荐。 (4认同)
  • @ABOS - 你能找到来源或解释原因吗? (2认同)