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

如何用async/await实现每隔4秒调用异步函数(含Timeout)

正确结合async/await与Timeout实现定时调用异步函数

一、修正原异步函数sendWhatsappMessage

先优化原函数的写法,去掉冗余的.then()(await已能等待Promise完成,无需额外链式调用):

exports.sendWhatsappMessage = async (data) => {
    // 获取WhatsApp客户端实例
    let client = wwjsInstances.getInstance(data.client_id);

    // 发送消息:用await替代then,逻辑更清晰
    await client.sendMessage(`${data.recipient}@c.us`, data.message);
    console.log('DONE');

    // 返回结果对象
    return {
        ok: true,
        params: data,
        message: `[WhatsApp] : Task ${data.client_id}: Succeeded`
    };
};

二、实现可靠的定时调用逻辑

直接用setInterval套异步函数容易出现任务堆积(如果异步函数执行时间超过间隔),推荐用async/await + 循环 + 延迟函数的组合,逻辑更可控:

1. 封装通用延迟函数

把setTimeout包装成Promise,方便配合await实现暂停:

// 延迟函数:等待指定毫秒数后完成
function delay(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

2. 定时循环调用的核心函数

// 定时任务的开关,用于控制启动/停止
let isTaskRunning = true;

/**
 * 定时循环发送WhatsApp消息
 * @param {Object} data - 发送消息的参数(与sendWhatsappMessage一致)
 * @param {number} interval - 调用间隔,默认4000毫秒(4秒)
 */
async function sendPeriodically(data, interval = 4000) {
    while (isTaskRunning) {
        try {
            // 调用异步发送函数并等待完成
            const result = await exports.sendWhatsappMessage(data);
            console.log(result.message);
        } catch (err) {
            // 捕获错误,避免循环因单次发送失败中断
            console.error('[WhatsApp] 消息发送失败:', err);
        }
        // 等待指定间隔后,执行下一次调用
        await delay(interval);
    }
}

3. 启动与停止定时任务

// 启动定时任务:传入你的业务参数
sendPeriodically({
    client_id: 'your-client-id',
    recipient: '123456789',
    message: '定时发送的消息内容'
});

// 如需停止任务,只需切换开关状态
// isTaskRunning = false;

三、你之前的错误原因分析

你之前的代码出现TypeError: resolve is not a function及逻辑混乱,核心问题是:

  • 在**非async函数timeout**中使用await,属于语法错误;
  • 强行将消息发送逻辑与延迟逻辑耦合,导致Promise的使用完全混乱;
  • 错误地提前resolve Promise,完全没起到延迟调用的作用。

内容的提问来源于stack exchange,提问作者yeln

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:31:12