我正在尝试为 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/