Как получить наблюдаемые события RxJS за нулевое время?
Я собираю все события наблюдаемого 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>
Можно ли "предвидеть будущее" и получить то же самое data
массив без ожидания 2 секунды?
Чтобы уточнить, я пытаюсь найти способ как-то обернуть данную наблюдаемую (obs$
в приведенном выше примере) с пользовательским таймером / планировщиком, чтобы я мог получить события сразу.
1 ответ
Решение
Вы можете создать экземпляр 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>