在d3.timer中生成四叉树导致堆栈溢出

时间:2016-06-05 02:33:07

标签: d3.js

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的计时机制有关。在setTimeoutsetInterval内生成四叉树会导致相同的错误,即使间隔非常慢。在循环中生成数千个工作正常。

任何人都对任何事情有所了解?我是在做一些愚蠢的事情,还是应该在d3的GitHub上提交一个问题?

1 个答案:

答案 0 :(得分:2)

我会留下这个以防万一有人碰到类似的东西,但问题是由point.xpoint.y值存储为字符串而不是数字引起的,这导致了意外的行为

所以事实证明我毕竟是愚蠢的,尽管在超时功能中运行时它只会导致错误仍然是一个谜。