如何在零时间内获得RxJS Observable事件?

时间:2017-03-30 02:15:18

标签: javascript rxjs rxjs5

我将Observable的所有事件收集到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>
&#13;
&#13;
&#13;

是否有可能预见未来&#34;并获得相同的data数组,无需等待2秒

为了澄清,我试图找到一种方法以某种方式用自定义计时器/调度程序以某种方式包装给定的Observable(上面的例子中的obs$),这样我就可以立即得到事件。

1 个答案:

答案 0 :(得分:4)

您可以创建VirtualTimeScheduler的实例,并可以在interval的调用中指定它。

如果您在订阅后再在调度程序上调用flush,则会立即发出事件:

&#13;
&#13;
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();
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
<script src="https://unpkg.com/rxjs@5.2.0/bundles/Rx.js"></script>
&#13;
&#13;
&#13;