我尝试为Bacon.fromPoll
requestAnimationFrame
的流
为什么以下代码会产生" 超出最大调用堆栈"错误?
function rafSequence() {
var raf = Bacon.fromCallback(function(callback) {
requestAnimationFrame(function() {
callback(Date.now());
});
});
return raf.merge(raf.flatMap(rafSequence));
}
rafSequence().log();
当两个流中的一个投出merge()
(Bacon.End
raf
时,我认为raf.merge(...)
会收集垃圾。那么为什么会出错?
更新: 我已经能够实现如下工作版本:
Bacon.repeat(() => Bacon.fromCallback(requestAnimationFrame));
我仍然感兴趣merge()
为什么不清理。
答案 0 :(得分:2)
在当前的Bacon.js实现(0.6.x)中,基于递归的所有“无限”序列都必然会失败,因为在每一步中,“流堆栈”都会变得更深。我确信有一种方法可以优化实现以更好地应对这种结构,但它远非微不足道。
对于您的特定情况,fromGenerator
方法会使您的实现更简单。如果您有兴趣,this commit中已经有相关代码。我建议你使用Github问题,以防你有兴趣解决这个问题。