【发布时间】:2021-05-30 06:37:32
【问题描述】:
当我等待来自 API 的一组项目时,它成功接收并分配给变量。
async ngOnInit(): Promise<void> {
this.items = await this.apiService.getItems().toPromise();
}
但是当我尝试从另一个函数调用它时,例如,分配给模板中的点击事件,它收到空。
getSomeValue() {
var value = this.items;
}
this.items 当时是一个空数组。为什么会发生这种情况以及如何解决?
【问题讨论】:
-
在那个订阅了他的 API 的问题中,我反而在等待它,并相信在 ngOnInit 钩子完成后这些数据将可用。在我的示例中,当用户单击按钮时从模板调用 getSomeValue(),此时 ngOnInit 已经完成。所以我不明白为什么这些数据在等待后立即可用,但在另一个调用了很长时间的函数中却没有。
-
可以将一个方法标记为
async,并且仍然可以在不使用await的情况下调用它,这就是你正在发生的事情。内部角度不使用await,因此代码执行不等待异步 api 调用的结果。 StackBlitz sample | Mozilla Docs for async functions
标签: javascript angular typescript