javascript - Ionic(Angular)崩溃的多个http调用问题
问题描述
我有模板中的项目列表
<ion-list class="ion-text-center">
<div *ngIf="farms$ | async as farmData">
<ion-item (click)="selectFarm(farm)" *ngFor="let farm of farmData" detail="true" button>
<ion-label>
<h2>{{ farm?.name }}</h2>
<p>{{getNumberOfAnimals(farm?.id) | async}}</p>
</ion-label>
</ion-item>
</div>
</ion-list>
在每个项目中,我需要从单独的端点获取动物的数量,这是单独的调用
getNumberOfAnimals(id){
const url = (some link) + id;
return this.http.get(url).pipe(take (1))
}
问题是什么 - 它正在调用端点次数(在页面崩溃之前不停)。其中一些甚至显示为已取消。
你有什么想法为什么以及如何解决这个问题?
解决方案
这是我对此答案的假设
- 您没有接受多个 ID 的 API。
- FormData 不是可观察的。
在这种情况下,我建议您不要调用此方法,因为从 html 调用就像从 ngViewChecked 调用它会调用多次。最好先获取数字并将其保存到数组中,然后从您的 html 中调用它。
这是示例代码。
// declared variables in component
farmData: Array<any> = [];
numberOfAnimals: Array<any> =[];
ngOnInit(){
const ids = of(this.farmData.map(elem => elem.id));
// do not forget to unsubscribe
ids.pipe(
concatMap((val)=>{
return this.getNumberOfAnimals(val).pipe(map((elem)=>{
const item = {
id: val,
number: elem,
}
return this.numberOfAnimals.push(item);
}))
})
).subscribe();
}
getNumberOfAnimals(val): Observable<any>{
// your api call
return of({number: 20})
}
callFromYourHTML(id: number){
return this.numberOfAnimals.find(elem => elem.id === id).number;
}
从你的 HTML 调用这个
<ion-list class="ion-text-center">
<div *ngIf="farms$ | async as farmData">
<ion-item (click)="selectFarm(farm)" *ngFor="let farm of farmData" detail="true" button>
<ion-label>
<h2>{{ farm?.name }}</h2>
<p>{{callFromYourHTML(farm?.id) | async}}</p>
</ion-label>
</ion-item>
</div>
</ion-list>
推荐阅读
- amazon-web-services - 如何将logstash与opensearch集成到logstash-output-opensearch
- javascript - 为什么 React 中 useEffect 钩子中的 setInterval 一直在运行?
- bash - Ubuntu 命令行 从转换后的 excel 文件中提取零件编号和数量
- c# - WinUI 3.0 桌面:文本框的背景颜色在鼠标悬停时更改
- java - 如何通过扫描类路径而不是手动指定要自动装配的类来使用 spring 和 junit 进行集成测试?
- python - 在三个字符串列表中搜索元素的 Python 函数
- javascript - Uncaught (in promise) ReferenceError: axios is not defined
- python - 如何将顶点前驱数据框转换为路径?
- performance - 为什么 IR 的大小不同,但可执行文件的大小却相同?以及如何通过静态分析比较性能?
- javascript - 将文本更改为隐藏和显示的按钮