【问题标题】:setInterval/setTimeout problem getting messages at once [duplicate]setInterval/setTimeout 一次获取消息的问题[重复]
【发布时间】:2020-11-16 19:40:41
【问题描述】:

我有一部分代码应该每隔 x 秒发送一次不和谐的消息,但它会等待 x 秒并一次发送所有消息

let amount = 5;
let interval = 3000
for (i = 0; i < amount; i++) {
  setInterval(() => {
    message.channel.send($arr[Random(0, $arr.length)]);
  }, interval);
}

我在循环之外尝试了这个,使用 setTimeout() 和 clearInterval() 或 clearTimeout() 它从来没有工作过

编辑:

let amount = 5;
const interval = 300; // 3000
const tId = setInterval(() => {
  console.log(amount)
  // message.channel.send($arr[Random(0, $arr.length)]);
  if (--amount === 0) clearTimeout(tId);
}, interval);

【问题讨论】:

    标签: javascript settimeout setinterval


    【解决方案1】:

    您应该创建一个函数并在 setTimeout(而不是 setInterval)中调用它,并使用计数器而不是 for 循环。
    你的代码会发生什么:所有的setInterval 内部代码都会立即执行...

    试试这样的:

    var counter = 0;
    var amount = 5;
    var interval = 3000
    
    function msg() {
      message.channel.send($arr[Random(0, $arr.length)]);
      counter++;
      if(counter<amount) {
        setTimeout(msg, interval);
      }
    )
    
    msg();
    

    【讨论】:

    • @Karan,谢谢!我忽略了...更正了我的答案。
    【解决方案2】:

    你需要让 CPU 喘口气

    let amount = 5;
    const interval = 300; // 3000
    const tId = setInterval(() => {
      console.log(amount)
      // message.channel.send($arr[Random(0, $arr.length)]);
      if (--amount === 0) clearTimeout(tId);
    }, interval);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 2011-02-11
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多