行为主体对价值变化的影响不同

时间:2019-12-23 11:32:47

标签: angular rxjs6

我们在某些服务中有一个行为主题

  city = new BehaviorSubject(config.defaultCity);

  get cityObservable(){
    return this.city.asObservable();
  }

当我们在某些组件中获得可观察值时,我们可以侦听值的变化,从而根据城市获取不同的数据。

像这样


  categories: Observable<any>;
  activeCoupons: Observable<any>;

  ngOnInit() {

    this.categories = this.utilsService.cityObservable
    .pipe(
      debounceTime(100),
      switchMap(cityId => this.categoryService.fetchCategories(cityId)),
      map((response: any) => response.data)
    );


    this.activeCoupons = this.utilsService.cityObservable
    .pipe(
      debounceTime(100),
      switchMap(cityId => this.couponService.fetchActiveCoupons(cityId))
    );


  }

问题在于,fetchCategories在城市价值变化时被调用一次,fetchActiveCoupons在城市价值变化时被调用两次!为什么它的价值两次发出?他们没有相同的代码吗?

1 个答案:

答案 0 :(得分:3)

  

问题在于,当城市价值更改时,fetchCategories被调用一次,而当城市价值更改时,fetchActiveCoupons被调用两次。

它被调用两次,因为它有两个订阅者。

您可以共享可观察对象并使用shareReplay()

重播以前的值
    this.activeCoupons = this.utilsService.cityObservable
    .pipe(
      debounceTime(100),
      switchMap(cityId => this.couponService.fetchActiveCoupons(cityId)),
      shareReplay(1)
    );

当您有大量可观察的内容并希望与多个订阅者共享结果,或者希望晚订阅者接收以前的值时,可以使用shareReplay()