Asynchronous RxJS使繁重的工作部分异步,简单

Asynchronous RxJS使繁重的工作部分异步,简单,asynchronous,rxjs,settimeout,heavy-computation,Asynchronous,Rxjs,Settimeout,Heavy Computation,我想让RxJS可以观察到来处理我的繁重工作。但如果需要,我希望它使订阅异步。例如: 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.

我想让RxJS可以观察到来处理我的繁重工作。但如果需要,我希望它使订阅异步。例如:

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');
在这种情况下,从observable中输出整个数据后,将打印after字符串。但我希望observable能够处理繁重的工作,并在需要时使剩余的工作异步


所以我想到的一个方法是,把最重的部分放在一个设定的超时中。我在网上搜索过,但还没有找到解决方案。可能的方法有哪些?哪种更好?

与其使用
setTimeout
,不如使用内置的RxJS调度机制。例如,要使订阅异步,可以使用
asyncScheduler
对其进行调度,如下所示:

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

这里有一个演示:

你可以把它包装成一个承诺。@IngoBürk。请提供一个例子。这有点令人困惑。将承诺传递给下一个函数或其他东西?非常好的回答。尽管一份完整的可能解决方案列表以及它们之间的比较也很好。谢谢,哎呀!一些问题。我已经在console.log和UI上测试过了。在console.log上,解决方案中的每件事情都正常进行,但在UI更改时,setTimeout不会阻止UI,但您的UI会阻止。有什么要补充的吗?