对RxJS5中的默认调度行为感到困惑

时间:2017-03-16 16:19:16

标签: rxjs observable rxjs5

在RxJS4中,以下代码会冻结您的环境:

select 
    t.*
  , count(case when flag = 1 then 1 end) over(partition by 1) as flag_1_count
from t

那是因为它会在即时调度程序上运行Rx.Observable.of(10) .repeat() .take(1) .subscribe(value => { console.log(value); }); ,而永远不会到达repeat。现在在RxJS5中没有立即调度程序,但如果我运行相同的代码,一切都按预期工作。究竟是什么改变了,我们正在运行什么调度程序?我认为默认情况下默认为 no 调度程序,如果我理解正确的话,那也会冻结take

1 个答案:

答案 0 :(得分:1)

RxJS 5中的默认调度程序是同步的 - 以前称之为立即调度程序。

this page).

的底部

RxJS 4中的默认调度程序不是立即的,它是“默认”,现在称为“asap” - 基本上它是在微任务队列上调度的。

从语义上讲,无论你使用什么调度程序,这都应该有效。也就是说,它应该在4中工作。你有一个10的无限源流,你取其中1个然后取消订阅。这触发了repeat()的内部订阅被处理,打破了你的无限循环。这可能是4中的一个错误?