2 回答

TA贡献1872条经验 获得超4个赞
从您使用它的方式来看,您根本不需要递归,并且像这样未经检查的无限递归只会导致内存问题,因为节点会创建越来越多的堆栈帧并捕获变量。
尝试不递归地编写它:
updateChannel: function(client, newList) {
return setInterval(async ()=> {
for(let i = 0; i < newList.length; i++) {
const message = await this.replace$Var(client, newList[i][1])
const channel = await client.channels.get(newList[i][0])
channel.setName(message).catch(err => {
console.log(`The channel with the id : ${newList[i][0]} was deleted, please restart the bot`)
newList.splice(i,1)
i-=1
})
}
}, 10000)
}
我返回返回值,setInterval以便调用者可以存储它并在以后需要时清除它。

TA贡献1812条经验 获得超5个赞
不要以这种方式使用 setInterval。使用设置超时。通过调用 setInterval,您可以在每次调用该函数时创建一个 UNIQUE 计时器。SetTimeout 将创建一个结束的计时器,然后创建一个新的计时器。
尝试这样的事情:
updateChannel: async function(client, newList){
for (let i = 0; i < newList.length; i++) {
const message = await this.replace$Var(client, newList[i][1])
const channel = await client.channels.get(newList[i][0])
channel.setName(message).catch(err => {
console.log(`The channel with the id : ${newList[i][0]} was deleted, please restart the bot`)
newList.splice(i, 1)
i -= 1
})
}
setTimeout(this.updateChannel , 100000, client, newList);
}
添加回答
举报