Discord.js 在设置间隔时处理承诺
很抱歉,如果标题有点不清楚,我想做的是捕获member.send,但我不知道在同时使用timeinterval时如何使用try和catch。这给了我一个错误,说我没有处理它Discord.js 在设置间隔时处理承诺,discord.js,Discord.js,很抱歉,如果标题有点不清楚,我想做的是捕获member.send,但我不知道在同时使用timeinterval时如何使用try和catch。这给了我一个错误,说我没有处理它 message.guild.members.forEach(member => { try { setInterval(() => { member.send("hello"); }, 2000)
message.guild.members.forEach(member => {
try {
setInterval(() => {
member.send("hello");
}, 2000)
}
catch(e) {
console.log("couldnt send dm to a user!");
}
第二个问题:无法读取未定义且未经处理的PromiserRejection的“guild”属性
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// create an async function and run it
(async function(message) {
for (const [id, member] of message.guild.members) {
try {
// await will throw any error found and allow try/catch to work
await member.send("hello");
} catch (err) {
console.log("Found error", err);
}
await sleep(2000);
}
})();
try/catch
不适用于拒绝承诺,也不适用于包装在setInterval
中的情况。只要抓住承诺:
member.send(“hello”).catch(err=>{
error(`Got error${err}.`);
});
如果要向每个人发送消息,最好的方法是使用:
功能睡眠(毫秒){
返回新承诺(resolve=>setTimeout(resolve,ms));
}
//创建一个异步函数并运行它
(异步函数(){
for(message.guild.members的const[id,member]{
试一试{
//wait将抛出发现的任何错误,并允许try/catch工作
等待会员。发送(“你好”);
}捕捉(错误){
日志(“发现错误”,错误);
}
等待睡眠(2000年);
}
})();
非常感谢您的帮助。现在我又遇到了另一个问题,我希望它向服务器中的每个人发送一条消息,但它会循环发送相同的消息,并一遍又一遍地向同一个人发送相同的消息(从间隔开始每隔2秒发送一次)@ErikJohansson我在回答中编辑了一些代码。我编辑了我的问题,抱歉,如果我犯了一个明显的错误,异步函数
部分应该放在实际的消息处理程序中,其中定义了消息
,而不是函数的参数。