如何零时间获取 RxJS Observable 事件?
How to get RxJS Observable events in zero time?
我正在收集一个 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>
是否可以 "foresee the future" 并获得相同的 data
数组 而无需等待 2 秒?
澄清一下,我试图找到一种方法以某种方式用自定义 timer/scheduler 包装给定的 Observable(上例中的 obs$
),以便我可以立即获取事件。
您可以创建 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();
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://unpkg.com/rxjs@5.2.0/bundles/Rx.js"></script>
我正在收集一个 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>
是否可以 "foresee the future" 并获得相同的 data
数组 而无需等待 2 秒?
澄清一下,我试图找到一种方法以某种方式用自定义 timer/scheduler 包装给定的 Observable(上例中的 obs$
),以便我可以立即获取事件。
您可以创建 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();
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://unpkg.com/rxjs@5.2.0/bundles/Rx.js"></script>