javascript - 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);
解决方案
您应该创建一个函数并在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();
推荐阅读
- android - Xamarin 和 httpclient 请求在模拟器中返回正常,但在设备上没有
- php - 在 RSS Feed WordPress 中仅包含带有元键“add_in_rss”的帖子
- linux - 更改根@
在 Ubuntu 18.04 中 - php - 没有传输支持给定的 Messenger DSN 原则
- vue.js - Vue.delete 或 $delete UI 未更新后
- ios - AVFoundation 是否支持 UPC 条码?
- php - 如何按名称分隔两个数组
- python - 如何在 Django 管理员中以编程方式创建具有模型权限的组?
- gnuplot - 在 gnuplot 中的圆上剪辑向量
- java - 从 PostgreSQL 数据库到 Java 应用程序的通知