在d3.timer
内生成四叉树有一个奇怪的问题。以下用于生成四叉树的代码不会引发任何错误:
var tree = d3.geom.quadtree(data);
但是我使用树进行碰撞检测,类似于this example。最大的区别是我没有使用强制布局,因此我不是在force.on('tick')
内生成树,而是尝试使用计时器:
d3.timer(function() {
var tree = d3.geom.quadtree(data);
});
这会引发堆栈溢出错误:
Uncaught RangeError: Maximum call stack size exceeded
我无法理解为什么会这样,但它似乎与JS的计时机制有关。在setTimeout
或setInterval
内生成四叉树会导致相同的错误,即使间隔非常慢。在循环中生成数千个工作正常。
任何人都对任何事情有所了解?我是在做一些愚蠢的事情,还是应该在d3的GitHub上提交一个问题?
答案 0 :(得分:2)
我会留下这个以防万一有人碰到类似的东西,但问题是由point.x
和point.y
值存储为字符串而不是数字引起的,这导致了意外的行为
所以事实证明我毕竟是愚蠢的,尽管在超时功能中运行时它只会导致错误仍然是一个谜。