我想創建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