Bacon.js超出最大调用堆栈

时间:2013-11-30 18:59:24

标签: javascript bacon.js

我尝试为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()为什么不清理。

1 个答案:

答案 0 :(得分:2)

在当前的Bacon.js实现(0.6.x)中,基于递归的所有“无限”序列都必然会失败,因为在每一步中,“流堆栈”都会变得更深。我确信有一种方法可以优化实现以更好地应对这种结构,但它远非微不足道。

对于您的特定情况,fromGenerator方法会使您的实现更简单。如果您有兴趣,this commit中已经有相关代码。我建议你使用Github问题,以防你有兴趣解决这个问题。