我正在嘗試為游戲編寫計時器。我決定使用 Redis 和 Web Sockets 來保持定時器在多個設備上的一致性。我有一個可以工作的函數,但是當我使用 setTimeout 或 setInterval 遞歸調用它時,我得到一個“范圍錯誤:超出最大調用堆棧大小”。我不知道如何繞過這個錯誤。有誰知道它是否與 node-redis 發布方法的阻塞性質有關?我附上了下面的代碼。const tick = (time: Time, publisher: RedisClient) => { let newTime: Time = { minutes: 0, seconds: 0} if(time.seconds === 0) { if(time.minutes === 0) { newTime = {minutes: 4, seconds: 0} } else { newTime = {minutes: time.minutes - 1, seconds: 59} } } else { newTime = {...time, seconds: time.seconds - 1} } let ticker = setInterval(tick(newTime, publisher), 1000) publisher.publish("scoring:timer", `${newTime.minutes}: ${newTime.seconds}`) publisher.on("message", function(_chanel, message) { if(message === "STOP") { clearInterval(ticker) } })}function startTimer() { const publisher = createClient() publisher.publish("scoring:events", "START") let time = { minutes: 4, seconds: 0 } tick(time, publisher)}
Redis遞歸:超出最大調用堆棧大小
慕慕森
2023-05-11 10:16:37
