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

Mis*_*hko 4 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));
  }
);
Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/rxjs@5.2.0/bundles/Rx.js"></script>
Run Code Online (Sandbox Code Playgroud)

是否有可能“预见未来”并在不等待 2 秒的情况下获得相同的data数组?

澄清一下,我试图找到一种方法,以某种方式obs$用自定义计时器/调度程序以某种方式包装给定的 Observable(在上面的示例中),以便我可以立即获取事件。

car*_*ant 5

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

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

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