Angular Subscription调用两次

时间:2017-05-16 19:15:18

标签: javascript angular typescript observable

我有一系列遵循这个逻辑的observable: getStyles() - > getPrices()

对于configs中的每个config.id,getStyles()返回一个样式Object,这个样式的Object传递给getLease,其中附加了一个价格,然后推送一个名为" style"

  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仅被调用一次?

1 个答案:

答案 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)
      })
  }