foreach通过在Angular中有另一个贴图作为值的贴图



我用Java做了一个服务,它返回了一个可观察的映射<k、 映射<k、 v>gt;我正试图用foreach迭代外部映射。我正在努力。

[...]
.then(
(response: Package) => {
response.activityMap.forEach((key: string, value: Map<string, number>) => {
//do something
});
}
)
[...]

包是一种具有以下参数的类型:

export interface Package{ 
diagnostic?: Diagnostic;
activityMap?: { [key: string]: { [key: string]: number; }; };
}

我想做的是制作一个forEach,它遍历";父亲;映射,因此对于每个键//剂量计量

但它不允许我使用foreach:

此表达式不可调用。类型"{[key:string]:number;}"没有调用签名。

由于您要返回一个可观察对象,因此您必须首先订阅该可观测对象,然后才能迭代返回的值。

我们如何处理订阅有两种方法

方法1

在我们的组件中处理订阅

this.myService.getPackage().subscribe((response: Package) => { 
response.activityMap.forEach((key: string, value: Map<string, number>) => {
//do something
});
})

还要确保取消订阅,以防止您的应用程序内存泄漏。

您可以使用TakeUntill RxJS运算符来完成此操作https://www.digitalocean.com/community/tutorials/angular-takeuntil-rxjs-unsubscribe

方法2

使用异步管道

您可以使用异步管道,而不是订阅,这被认为是最佳实践https://blog.angular-university.io/angular-reactive-templates/

提示

与其在订阅中迭代,我建议您在Pipe中组合使用RxJS Map运算符https://rxjs.dev/api/operators/map

最新更新