angular - “承诺”类型上不存在属性“订阅”>' 角度服务调用
问题描述
尝试在组件的初始化时在 Angular 中进行服务调用,我从中获取数据的服务器需要一些时间来响应,因此我试图使用承诺将返回的数据分配给组件中的 this.stats
尝试编写函数时,我得到->我的“订阅”(在我的组件中)的“Promise<Observable>”类型上不存在属性“订阅”我尝试了几种方式重写该函数,我无法改变错误,我可能只是从根本上做错了,但在这里找不到任何与我的确切情况相匹配的东西,所以我想我会寻求任何可能的解释......也许有些类型转换我需要改变吗?
零件
export class StatsComponent implements OnInit {
@Input() stats: any
@Output() onUpdateStats: EventEmitter<Object> = new EventEmitter()
constructor(private specsService: SpecsService) { }
async ngOnInit(): Promise<void> {
await this.specsService.getStats().subscribe((response) => {this.stats=response});
}
updateStats(){
console.log(this.stats)
this.onUpdateStats.emit()
}
}
服务.ts
async getStats():Promise<Observable<Object>>{
return await this.http.get(`http://localhost:8888/fetchStats`)
}
解决方案
你不应该把 promise 和 observables 混在一起。Angular 自带的 RxJs 使用了 Observable 设计模式,你绝对应该坚持使用它并避免使用 async/await。
服务 :
getStats():Observable<Object>{
return this.http.get(`http://localhost:8888/fetchStats`)
}
零件 :
export class StatsComponent {
@Output() onUpdateStats: EventEmitter<Object> = new EventEmitter();
stats: Observable<Object>;
constructor(private specsService: SpecsService) {
this.stats = this.specsService.getStats();
}
updateStats(){
console.log(this.stats)
this.onUpdateStats.emit()
}
}
推荐阅读
- magento - 如何在 Magento 1.9 的 PHML 文件中添加图像
- vue.js - 在同一个模板 vue.js 中重用同一个搜索组件
- jquery - 更改添加到购物车文本,包括单个产品页面中的一些 jQuery 代码
- rest - 调用执行 UPDATE 和 INSERT 的 API 端点时 PUT 或 POST HTTP 动词?
- android - Unity3D 资产包精灵/默认着色器问题
- nsis - nsis 中的组件共享文件
- mysql - MySQL:具有多个 AND 条件的多对多关系
- javascript - Javascript > 解复用/缓存 Promise 函数调用
- r - 从 R 中的数据库中查询内容
- python - 包含 matplotlib 的脚本不在 CMD 中运行