簡體   English   中英

無法在nodejs中停止此遞歸settimeout函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM