Discord.js 在设置间隔时处理承诺

Discord.js 在设置间隔时处理承诺,discord.js,Discord.js,很抱歉,如果标题有点不清楚,我想做的是捕获member.send,但我不知道在同时使用timeinterval时如何使用try和catch。这给了我一个错误,说我没有处理它 message.guild.members.forEach(member => { try { setInterval(() => { member.send("hello"); }, 2000)

很抱歉,如果标题有点不清楚,我想做的是捕获member.send,但我不知道在同时使用timeinterval时如何使用try和catch。这给了我一个错误,说我没有处理它

  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我在回答中编辑了一些代码。我编辑了我的问题,抱歉,如果我犯了一个明显的错误,
异步函数
部分应该放在实际的消息处理程序中,其中定义了
消息
,而不是函数的参数。