CombineLatest没有在rxjs中获得最新价值

时间:2019-04-04 08:46:59

标签: rxjs6 combinelatest

这是代码

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,我是否缺少任何东西,请帮助,谢谢

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('-'));

timer with combineLatest illustration

这是combineLatest with timers

的游乐场

希望这会有所帮助