This is how I would do that with Kefir without resorting to Kefir.stream
. Note that job
below would be the task you do at each tick. I stubbed a dummy task for the code to work.
let result = Kefir.repeat(() => {
let job = Kefir.later(Math.random() * 5000);
let wait = Kefir.later(2000).ignoreValues();
return Kefir.merge([job, wait]);
});
Below is a visualization of the events using the style from the Kefir documentation:
spawned 1 - job: ------1X
spawned 1 - wait: -----------X
spawned 1 - merge: ------1----X
spawned 2 - job: ------------------2X
spawned 2 - wait: -----------X
spawned 2 - merge: ------------------2X
spawned 3 - job: ---3X
spawned 3 - wait: -----------X
spawned 3 - merge: ---3-------X
result: ------1-----------------------2----3--------...