RxJS делает тяжелую работу асинхронной, просто
Я хочу позволить RxJS Observable справиться с моей тяжелой работой. Но я хочу сделать подписку асинхронной, если это необходимо. Например:
const observable = Rx.Observable.create(function (observer) {
observer.next(1);
var cycle = 100;
while(cycle-- > 0){
observer.next(2);
}
observer.next(3);
observer.complete();
});
console.log('before');
observable.subscribe({
next: x => console.log('got value ' + x),
error: err => console.error('something wrong occurred: ' + err),
complete: () => console.log('done'),
});
console.log('after');
в этом случае после строки распечатывается после целых данных из наблюдаемой. Но я хочу, чтобы можно было справиться с тяжелой работой и, когда необходимо, сделать оставшуюся работу асинхронной.
Итак, один из способов, который приходит мне в голову, это поместить тяжелую часть в setTimeout. Я искал в Интернете, но пока не достигнуто решение. Каковы возможные пути и какой из них лучше?
1 ответ
Вместо того, чтобы использовать setTimeout
лучше использовать встроенные механизмы планирования RxJS. Например, чтобы сделать подписку асинхронной, вы можете запланировать ее с помощью asyncScheduler
, как это:
observable.pipe(
observeOn(asyncScheduler)
).subscribe(
...
)
Вот демоверсия: https://stackblitz.com/edit/rxjs-ahglez