rxjs 仅在特定时间间隔发出

问题描述 投票:0回答:2

我只想在特定的时间间隔(特别是 3 秒和 6 秒)调用一个函数,并且很难找到正确的运算符来使用。

bufferTime 似乎是一个不错的候选者,但它输出的数组不是我所期望的。

这是一个简短的例子:

summarize(): void {
  const responseInterval = interval(1000);
  const responseIntervalObservable = responseInterval.pipe(bufferTime(1000));

  responseIntervalObservable.subscribe(intervalValue => {
    console.log('intervalValue', intervalValue);
  });
}

输出:

intervalValue []
intervalValue [0, 1]
intervalValue [2]
intervalValue [3]
intervalValue [4]
intervalValue [5]
intervalValue [6]
intervalValue [7]
intervalValue [8]

我希望看到类似

[1], [2], [3]
的东西,这样我就可以在 3 秒处专门调用一个函数,然后在 6 秒处再次调用。

什么是正确的或更好的运算符?

rxjs rxjs-observables
2个回答
0
投票

我最终只是使用

interval
而不是将 bufferTime 放在中间。这会为迭代发出一个从零开始的索引,而不是一个数组。

然后我可以检查索引中的特定值,直到请求完成或超时。


0
投票

不确定这是否太过分了,但你可以这样做。

interval(1000)
  .pipe(
    filter((i) => i === 3 || i === 6),
    tap((i) => console.log(i, 'seconds have passed')),
    filter((i) => i === 6),
    take(1),
    finalize(() => console.log('Unsubscribe'))
  )
  .subscribe();
© www.soinside.com 2019 - 2024. All rights reserved.