在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
。
答案 0 :(得分:1)
RxJS 5中的默认调度程序是同步的 - 以前称之为立即调度程序。
的底部RxJS 4中的默认调度程序不是立即的,它是“默认”,现在称为“asap” - 基本上它是在微任务队列上调度的。
从语义上讲,无论你使用什么调度程序,这都应该有效。也就是说,它应该在4中工作。你有一个10的无限源流,你取其中1个然后取消订阅。这触发了repeat()
的内部订阅被处理,打破了你的无限循环。这可能是4中的一个错误?