我用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