0

我想让 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');

在这种情况下,after 字符串会在从 observable 输出整个数据之后打印出来。但我希望 observable 处理繁重的工作,并在需要时使剩余的工作异步。

所以我想到的一种方法是将重要的部分放在 setTimeout 中。我已经在网上搜索过,但还没有找到解决方案。有哪些可能的方法,哪一种更好?

4

1 回答 1

1

与其使用setTimeout,不如使用内置的 RxJS 调度机制。例如,要使您的订阅异步,您可以使用 来安排它asyncScheduler,如下所示:

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

这是一个演示:https ://stackblitz.com/edit/rxjs-ahglez

于 2018-12-15T08:22:00.547 回答