javascript - 如何在 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 确实周期性地产生值,但忽略该时间窗口的值。
有人可以告诉我如何使可观察的在一段时间内产生价值并且不会错过或忽略价值吗?
解决方案
您可以使用可观察到的间隔来压缩它,如下所示:
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))
推荐阅读
- scala - 从高阶函数构建通用可重用迭代模块
- r - R:广义线性混合模型(GLMM):标准系数与奇数比?
- node.js - 根据nodejs中的日期获取每个团队最新值的最佳方法是什么
- xamarin - TwitterA API 登录页面未使用 Rg.Plugins PopupPage 显示
- java - 如何将 PDF InputStream 转换为 Html 字符串?
- mysql - redis和mysql之间的数据同步
- sql - 如何在sql中获取从今天开始的最近1个月的数据?
- docker - 为什么 docker 的 rabbitMQ 容器不以(几乎)类似的命令开始?
- r - 获取rds文件的行数和列数而不在R中加载它?
- html - 使用纯 CSS 显示/隐藏元素的单个按钮