首页 > 解决方案 > setInterval/setTimeout 一次获取消息的问题

问题描述

我有一部分代码应该每隔 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);

标签: javascriptsettimeoutsetinterval

解决方案


您应该创建一个函数并在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();

推荐阅读