【问题标题】:Observable combineLatest with interval/timer可观察的 combineLatest 与间隔/计时器
【发布时间】:2017-12-06 06:47:15
【问题描述】:

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

  .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
          }
    }

【问题讨论】:

    标签: angular typescript rxjs observable


    【解决方案1】:

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

    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)      
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多