rxjs6 - CombineLatest 没有采用 rxjs 中的最新值
问题描述
这是代码
const timerOne = timer(1000, 4000).pipe(
map(x=>`1-${x}-${new Date().getSeconds()}`)
)
//timerTwo emits first value at 2s, then once every 4s
const timerTwo = timer(2000, 4000).pipe(
map(x=>`2-${x}-${new Date().getSeconds()}`)
);
//timerThree emits first value at 3s, then once every 4s
const timerThree = timer(3000, 4000).pipe(
map(x=>`3-${x}-${new Date().getSeconds()}`)
);
//when one timer emits, emit the latest values from each timer as an array
const combined = combineLatest(timerOne, timerTwo, timerThree);
const subscribe = combined
.pipe(take(5))
.subscribe(
([timerValOne, timerValTwo, timerValThree]) => {
console.log(
` ${timerValOne},
${timerValTwo},
${timerValThree}`
);
}
);
这是 rxjs 中 combineLatest() 的定义
在每个 observable 发出至少一个值之前,不会发出初始值。
现在从上面的定义,输出应该是
1-2-56,
2-1-57,
3-0-58
代替
1-0-56,
2-0-57,
3-0-58
因为,到那时,我们只会在 3 秒后获得timerThree Observable 的值,timerOne的最新值为 2, timerTwo的最新值为1,我是否遗漏了什么,请帮忙,谢谢
解决方案
您的计时器将首先在 [1s, 2s, 3s] 内发出,然后以 4s 的速率继续。
所以所有流第一次发射的时间是3s。
下一个事件combineLatest
(当所有流都发出并且任何流发出新事件时)是:5s、6s、7s ...
这是一个插图
const timerOne = timer(100, 400);
const timerTwo = timer(200, 400);
const timerThree = timer(300, 400);
combineLatest(timerOne, timerTwo, timerThree, (...arr)=>arr.join('-'));
希望这可以帮助
推荐阅读
- php - 如何处理具有许多依赖项的函数
- python - How to use recursion to divide a number multiple times and keep track of the iterations?
- julia - 通过字符串参数访问函数中的结构字段
- php - 如何在 Slim 框架中使用 php 变量?
- sql - 尝试实现内部联接
- javascript - FCM 解析错误:标识符“函数”已被声明
- html - 输入的活动状态标签转换的意外行为
- c - C pthread_t 允许读/写吗?
- javascript - 将 MM 转换为英寸 - Javascript
- sql-server - SQL Server:从每日重复值中获取日期范围