CombineLatest 没有采用 rxjs 中的最新值
CombineLatest is not taking the latest value in 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() 的定义
will not emit an initial value until each observable emits at least
one value.
现在根据上面的定义,输出应该是
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,我是不是遗漏了什么,请帮忙,谢谢
您的计时器将在 [1 秒、2 秒、3 秒] 后首次发出,并将以 4 秒的速率继续。
所以 所有流 第一次发射是在 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('-'));
的游乐场
希望对您有所帮助
这是代码
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() 的定义
will not emit an initial value until each observable emits at least one value.
现在根据上面的定义,输出应该是
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,我是不是遗漏了什么,请帮忙,谢谢
您的计时器将在 [1 秒、2 秒、3 秒] 后首次发出,并将以 4 秒的速率继续。
所以 所有流 第一次发射是在 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('-'));
希望对您有所帮助