[英]can't stop this recursive settimeout function in nodejs
我設置了此遞歸設置超時功能,以便為每個游戲室發送時間,但是當時間結束時,我無法停止該功能。 我嘗試了明確的超時,但沒有幫助,所以如果有人願意幫助我。
setTimeout(function GameTime() {
io.in(Rooms[picked].name).emit('PlayTime', timeleft);
timeleft.x--; // HERE WHERE I DECREMENT THE TIME
setTimeout(GameTime, 1000)
}, 1000)
假設您沒有停止循環,則必須使用函數clearTimeout
停止循環。
針對您的方案的更好方法是使用setInterval
函數:
var x = 3; var intervalId = setInterval(function GameTime() { //io.in(Rooms[picked].name).emit('PlayTime', timeleft); //timeleft.x--; // HERE WHERE I DECREMENT THE TIME x--; if (x < 0) { clearInterval(intervalId); console.log('finished!'); return; } console.log('looping!'); }, 1000)
您需要引用要清除的setTimeout:
let timeoutId, gameTimeoutId timeoutId = setTimeout(function GameTime() { console.log('GameTime') gameTimeoutId = setTimeout(GameTime, 1000) }, 1000) setTimeout(function GameTime() { clearTimeout(timeoutId) clearTimeout(gameTimeoutId) }, 5000)
此摘要將每隔1秒調用一次GameTime
並在5秒鍾后刪除間隔循環
作為替代方案,可以使用setInterval,這將簡化您的代碼:
const intervalId = setInterval(() => { console.log('GameTime') // do stuff }, 1000) setTimeout(() => { clearInterval(intervalId) }, 5000)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.