You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:35:20