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

Другие вопросы по тегам