这是代码
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()的定义
直到每个可观察到的至少发出一个初始值 一个值。
现在根据上述定义,输出应为
1-2-56,
2-1-57,
3-0-58
代替
1-0-56,
2-0-57,
3-0-58
因为,我们将仅在3秒后获得 timerThree 的值,那时 timerOne 的最新值为2,而 timerTwo 将为1,我是否缺少任何东西,请帮助,谢谢
答案 0 :(得分:1)
您的计时器将首先以[1s,2s,3s]发出,并以4s的速率继续计时。
所以所有流第一次发出的时间是 3秒。
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('-'));
的游乐场
希望这会有所帮助