首页 > 解决方案 > 如何在 rxjs 上每 1 秒产生价值

问题描述

如果我已经有一个 observable,那么我应该使用什么运算符来使这个 observable 产生值,比如每 1 秒?

// this just an example, In my project, I can't control when the 
// observable will produce value. I can assume that it will produce
// value very fast.
const obs = from([1,2,3,4,5]);

obs 将很快发出值 1,2,3...。但是,如果我希望它每 1 秒发出一次值怎么办?我的意思是,只要确保 obs 发出值不会太快?

我从reactivex检查了文档,但找不到操作员这样做。例如,延迟,它只是使值产生延迟一段时间,但值之间的相对时间间隔被保留,而 debounceTime 确实周期性地产生值,但忽略该时间窗口的值。

有人可以告诉我如何使可观察的在一段时间内产生价值并且不会错过或忽略价值吗?

标签: javascriptnode.jsrxjsreactivex

解决方案


您可以使用可观察到的间隔来压缩它,如下所示:

import { zip, from, interval } from rxjs

const obs = zip(
  from([1,2,3,4,5]),
  interval(1000),
  (val, i) => val // Just emit the value
)

obs.subscribe(val => console.log(val))

如果您希望第一个值立即发出,那么您可以使用timer而不是interval

import { zip, from, timer } from rxjs

const obs = zip(
  from([1,2,3,4,5]),
  timer(0, 1000),
  (val, i) => val // Just emit the value
)

obs.subscribe(val => console.log(val))

如果您愿意,也可以使用管道,如下所示:

import { from, interval } from rxjs
import { zip } from rxjs/operators

const obs = from([1,2,3,4,5])
  .pipe(
    zip(interval(1000), val => val)
  )

obs.subscribe(val => console.log(val))

推荐阅读