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>
      

Run codeHide result


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.

+3


source to share


1 answer


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>
      

Run codeHide result


+3


source







All Articles