RxJS делает тяжелую работу асинхронной, просто - PullRequest
0 голосов
/ 15 декабря 2018

Я хочу позволить 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 Ответ

0 голосов
/ 15 декабря 2018

Вместо использования setTimeout лучше использовать встроенные механизмы планирования RxJS.Например, чтобы сделать подписку асинхронной, вы можете запланировать ее с помощью asyncScheduler, например:

observable.pipe(
    observeOn(asyncScheduler)
).subscribe(
    ...
)

Вот демонстрационная версия: https://stackblitz.com/edit/rxjs-ahglez

...