【发布时间】:2020-10-11 10:55:50
【问题描述】:
我正在使用 Angular 9 和 rxjs 6,我正在尝试获取节点列表:
NodeService.ts
public getList(): Observable<Nodes[]> { return this.http.get<Nodes[]>(URL); }
节点实体:
export class Nodes {
public id: number;
public name: string;
public site_id: number;
public site: Site;
}
nodes.component.ts:
public getAllNodes() {
this.dataSource.data = [];
this.nodeService.getList()
.subscribe(
nodes => {
nodes.map(
(node) => {
this.siteService.getSiteById(node.site_id).subscribe(site => {
node.site = site;
})
});
this.dataSource.data = nodes;
console.log(nodes);
},
error => {
console.log(error);
},
() => {
}
);
}
=> 默认情况下,node.site = null,所以我使用 node.site_id 在 subscribe 方法中获取完整的“Site”对象。 但我有近 6000 次调用“siteService.getSiteById()”,并且出现如下错误:资源不足。
你有更好的方法吗,
谢谢
【问题讨论】:
-
这就是 switchMap 的用途..
-
如果您必须进行 6000 次调用,那么它是一个糟糕的架构。让你的 getList 返回你需要的东西
-
在多个item的循环中调用API不是一个好习惯,但是在选择任何特定节点时调用一个API可以达到相同的效果