第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Redis遞歸:超出最大調(diào)用堆棧大小

Redis遞歸:超出最大調(diào)用堆棧大小

慕慕森 2023-05-11 10:16:37
我正在嘗試為游戲編寫計(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)}
查看完整描述

1 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

tick()您在設(shè)置導(dǎo)致無限循環(huán)的間隔之前執(zhí)行:

setInterval(tick(newTime, publisher), 1000);

您應(yīng)該提供一個(gè)將由其自身執(zhí)行的函數(shù)setInterval()

setInterval(() => tick(newTime, publisher), 1000);

PS:當(dāng)前的實(shí)現(xiàn)應(yīng)該使用setTimeout()而不是setInterval()因?yàn)槟?code>setInterval()每秒執(zhí)行一次它的回調(diào)(并且你的回調(diào)設(shè)置另一個(gè)計(jì)時(shí)器,它執(zhí)行一個(gè)設(shè)置另一個(gè)計(jì)時(shí)器的回調(diào),它執(zhí)行一個(gè)......你在那里看到另一個(gè)循環(huán)嗎?)


查看完整回答
反對(duì) 回復(fù) 2023-05-11
  • 1 回答
  • 0 關(guān)注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)