我想创建setTimeout,将调用函数,然后函数将再次调用setTimeout但具有不同的区间值。动态setTimeout导致“最大调用堆栈超出”错误
问题是,它似乎陷入了无限循环。
这些都是基本变量:
var interval = 1500;
var elapsed = 0;
var totalTimer = 40000;
var startTime = null;
这是函数:
function playLights(){
startTime = Date.now();
interval = (totalTimer-elapsed) * 0.026;
lights[0].color(0, 91, 68, 3500, 0);
lights[1].color(0, 91, 68, 3500, 0);
setTimeout(function(){
lights[0].color(0, 100, 100, 3500, 0);
lights[1].color(0, 100, 100, 3500, 0);
}, 300);
elapsed = Date.now() - startTime;
if((Date.now() - startTime) < 37000){
setTimeout(playLights(), interval.toFixed());
}
console.log("Interval: "+interval+" ,Elapsed: "+elapsed);
}
当动作发生了,我叫playLights();
什么是应该发生的:
1)炸弹在游戏中获得种植,
2)它必须调用playLights(),
3)它必须得到当前的时间,并保存它,
4)必须确定区间,这样以来它的第一个电话 - 它必须是1040毫秒。
5)它必须闪烁的颜色。 (现在不重要)
6)然后它必须根据currentDate - storedDate计算经过了多少时间。
7)然后,它必须检查经过时间大于37000毫秒(37秒),
如果是 - 对自己的setTimeout。
如果没有 - 只是没有。
我不断收到由Node.js的
超过最大调用堆栈难道我犯错的地方,导致其陷入无限循环?
'setTimeout(playLights(),''应该是'setTimeout(playLights,' - 您正在运行该方法并传递其结果,rath呃比将它作为参考传递给'setTimeout'。 – Blorgbeard
@Blorgbeard辉煌,谢谢。这解决了这个问题。 – AleRemote225