Node.js中如何让setInterval每次循环的间隔值动态随机
实现每次执行间隔随机的定时任务
你的问题核心在于setInterval只会在初始化时调用一次getRandomInterval获取间隔值,后续所有循环都会复用这个固定值,无法实现每次执行都使用新的随机间隔。要解决这个问题,我们可以改用setTimeout递归调用的方式,每次执行完任务后重新生成随机间隔并设置下一次定时。
修改后的代码实现
bot.start(async (ctx, next) => { ctx.reply(`Se preparem para os sinais! proximo sinal em alguns minutos`); // 定义递归执行任务的函数 const executeTask = () => { if (paused) return; // 暂停状态下停止递归 bot.telegram.sendMessage(process.env.TELEGRAM_CHANNEL, '🛑 APOSTE AGORA 🛑\n\n* Analisar as rodadas anteriores pra saber se vai entrar 10 segundos antes ou 10 segundos depois. *\n\nSaque automático 1.5x \n\nMax 2x\n\n50% de saque ativado em 1.3x\n\n*Gerenciamento de banca, se perder a culpa não é minha!*\n\nVamos pra cima voadores\n\n🚀💜✅\n'); // 生成新随机间隔,设置下一次任务 const nextInterval = getRandomInterval(3, 5) * 1000; setTimeout(executeTask, nextInterval); }; if (!paused) { // 启动第一次任务,之后自动递归 executeTask(); } next(); }); function getRandomInterval(min, max) { // 修正随机数逻辑,确保能生成max值(原逻辑无法取到5) let randomInterval = Math.floor(Math.random() * (max - min + 1) + min); console.log('linha 92: ' + randomInterval); return randomInterval; }
关键说明
- 替换
setInterval为递归setTimeout:每次执行完任务后重新计算随机间隔,保证每次的等待时间都不同。 - 修复随机数生成逻辑:原代码
Math.floor(Math.random() * (max - min) + min)只能生成min到max-1的数值,调整为Math.floor(Math.random() * (max - min + 1) + min)后,才能正确包含3、4、5三个目标值。 - 保留暂停逻辑:在递归函数开头检查
paused状态,一旦触发暂停就终止后续的定时任务。
内容的提问来源于stack exchange,提问作者netryx
相关产品推荐
相关产品推荐

