我正在尝试为 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() 会在 2 个流之一抛出 Bacon.End (raf 中的 raf.merge(...) 。那么为什么会出错?

更新:
我已经能够实现一个工作版本如下:
Bacon.repeat(() => Bacon.fromCallback(requestAnimationFrame));

我仍然感兴趣为什么 merge() 没有清理。

最佳答案

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

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

关于javascript - 超过 Bacon.js 最大调用堆栈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20304334/

10-12 13:08