How to get RxJS Observable events at zero time?
I am collecting all Observable events into an array data
:
const obs$ = Rx.Observable
.interval(500)
.take(4);
let data = [];
const start = performance.now();
obs$.subscribe(
value => {
data.push({
time: performance.now() - start,
data: value
});
},
() => {},
() => {
console.log(JSON.stringify(data, null, 2));
}
);
<script src="https://unpkg.com/rxjs@5.2.0/bundles/Rx.js"></script>
Is it possible to "foresee the future" and get the same array data
without waiting 2 seconds ?
To clarify, I'm trying to find a way to somehow bind a given Observable ( obs$
in the example above) with a custom timer / scheduler to get events right away.
source to share
You can instantiate VirtualTimeScheduler
and specify it in the call interval
.
If you then call flush
in the scheduler after subscribing, the events are dispatched immediately:
const scheduler = new Rx.VirtualTimeScheduler();
const obs$ = Rx.Observable
.interval(500, scheduler)
.take(4);
let data = [];
const start = scheduler.now();
obs$.subscribe(
value => {
data.push({
time: scheduler.now() - start,
data: value
});
},
() => {},
() => {
console.log(JSON.stringify(data, null, 2));
}
);
scheduler.flush();
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://unpkg.com/rxjs@5.2.0/bundles/Rx.js"></script>
source to share