angular - 函数在第二次调用时被记录
问题描述
当我第一次调用组件函数时 this.products 是未定义的。第二次通话后,我看到了正确的结果。
我也尝试使用 Observable 获得相同的结果。我检查了不同浏览器上的控制台日志。
//Service function
getProducts()
{
return this.http.get<Product[]>(this.serverUrl + '/products').pipe(map(data => data));
}
//Component function
getProducts(){
this.productService.getProducts().subscribe(data => (this.products = data));
console.log(this.products);
}
解决方案
您应该稍微修改一下您处理订阅的方式。
试试下面的。
public getProducts(): void
{
this.productService.getProducts().subscribe(data =>
{
this.products = data;
console.log(this.products);
});
}
HTTP 调用是一个异步任务,因此您需要从订阅内部进行分配和日志记录,console.log();
否则在 asycn 调用开始后立即运行。(Aysnc 需要一些未知的时间)。
推荐阅读
- r - 插入符号 CV 中的平均预测值
- javascript - 无法读取 BoostrapVue 模态中未定义的属性“显示”
- react-native - × TypeError: Cannot read property 'navigate' of undefined on React-Native expo react-navigation 5.xx
- pine-script - 了解绘图功能
- kubernetes - 向 kube 清单文件中的参数注入/传递值
- node.js - 循环 discord.js 中的消息侦听器
- python - 如何处理 Python 中的 UnboundLocal 错误
- scikit-learn - 如何避免在 scikit-learn Logistic Regression 的 fit() 中对密集输入数据进行放大/复制
- java - Tomcat 无法启动 SpringBoot 战争。缺少类异常 LocalizableMessageFactory$ResourceBundleSupplier
- datetime - 在 Kusto 中为日期时间值添加偏移量