我有一系列遵循这个逻辑的observable: getStyles() - > getPrices()
对于configs中的每个config.id,getStyles()返回一个样式Object,这个样式的Object传递给getLease,其中附加了一个价格,然后推送一个名为" style" 的数组p>
getStyles(configs: any) {
configs.forEach(config => {
this._APIService.getStyleByID(config.id).subscribe(
res => {
res.config = config;
this.getLease(res);
}
);
});
}
getLease(style: any): void {
this._priceService.getPrice().subscribe(
price => {
style.price = price;
this.garage.push(style);
console.log(this.garage);
});
}
}
我遇到的问题是存在重复调用,因为样式数组的样式对象数量是它需要的2倍。问题是Angular在我希望它调用一次时调用this._APIService.getStyleByID()两次。如何修复我的Observable仅被调用一次?
答案 0 :(得分:1)
尝试使用switchMap,就像mergeMap一样,如果它发生变化,它会取消最后一个请求:
getStylesWithoutYear(): void {
this._APIService.getStylesWithoutYear()
.switchMap(styles => {
styles.years.forEach(year => {
year.styles.forEach(style => {
this._APIService.getStyleByID(style.id)
})
})
})
.subscribe(style => {
console.log('style', style)
})
}