我正在嘗試為游戲編寫計(jì)時(shí)器。我決定使用 Redis 和 Web Sockets 來保持定時(shí)器在多個(gè)設(shè)備上的一致性。我有一個(gè)可以工作的函數(shù),但是當(dāng)我使用 setTimeout 或 setInterval 遞歸調(diào)用它時(shí),我得到一個(gè)“范圍錯(cuò)誤:超出最大調(diào)用堆棧大小”。我不知道如何繞過這個(gè)錯(cuò)誤。有誰知道它是否與 node-redis 發(fā)布方法的阻塞性質(zhì)有關(guān)?我附上了下面的代碼。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遞歸:超出最大調(diào)用堆棧大小
慕慕森
2023-05-11 10:16:37