当我将数组插入rxjs主题时,我得到的数组是相同数组的3倍。
父组件:
const geoExistsArr: { lat: number, lng: number }[] = [];
for (let i = 0; i < x.length; i++) {
for (let j = 0; j < requiredKeys.length; j++) {
// Some logic
}
if (has(x[i].data, 'lat') && has(x[i].data, 'lng')) {
// Pushing to array
const { lat, lng } = x[i].data;
geoExistsArr.push({ lat, lng })
}
}
console.log(geoExistsArr)
// Adding the array to subj.
this.locationSrv.setLocations(geoExistsArr)
服务:
setLocations(loc: ILocation) {
this.geoArray = [...this.geoArray, loc]
this.geoSubj$.next(this.geoArray)
}
子组件(显示主题的值):
this.geoLocation$ = this.locationSrv.geoCoordinates$.pipe(
switchMap((geo, idx) => {
console.log(geo, idx) // <- problem here. this guy prints 3 times.
geo.forEach(g => {
console.log(g)
requests.push(this.locationSrv.getAddressByLatLng$(g))
});
return concat(...requests).pipe(
toArray()
)
}),
会发生什么: 我将单个数组存储到主题。
我对这个错误一无所知,因此我们将不胜感激!
答案 0 :(得分:0)
好的,我承认伊玛驴。在我的子组件内部,我正在运行一个*ngFor
循环,而我解开geolocations$ | async
的模板就在那个循环内。 @Andrew Allen建议查看调用主题的next()函数的次数,但是对于阅读此主题的任何人,请检查您的模板可观察对象是否在html中的某个位置被多次包装。谢谢!