可观察的combineLatest与间隔/计时器

时间:2017-12-05 18:49:20

标签: angular typescript rxjs observable

我尝试将.combineLatest与设定的间隔结合使用,以便每隔5秒发出一个新值。然后我将this.dailyStocks作为输入传递给子组件,但每次传入输入的数据都是相同的,当我在开发工具中查看我的网络选项卡时,我看不到正在进行的其他调用。 / p>

  .flatMap(() => {
    return Observable.interval(5000).combineLatest(
      this.http.getData(args),
      this.http.getOtherData(args)
    )
  })
  .subscribe(res => {
    this.dailyStocks = res[1];
    this.dailyStocks = this.dailyStocks.slice(0)
  }

子组件:

  @Input('dailyStocks')
  set dailyStocks(val: ListSymbolObj[]) {
    this._dailyStocks.next(val);
  }

  get dailyStocks() {
    return this._dailyStocks.getValue();
  }

  ngOnInit() {
    this._dailyStocks
          .filter(x => x != undefined)
          .take(1)
          .subscribe(res => {
            //res is same
          }
    }

1 个答案:

答案 0 :(得分:2)

要对间隔中的每个值发出请求,您应该这样写:

Observable.interval(5000).switchMap(() =>
  Observable.combineLatest(
    this.http.getData(args),
    this.http.getOtherData(args)      
  )
)

目前,您的代码没有提供额外的请求,因为它只是将来自所有三个Observable的值组合在一起。它等同于以下代码:

Observable.combineLatest(
  Observable.interval(5000),
  this.http.getData(args),
  this.http.getOtherData(args)      
)