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

Node.js中如何在node-cron定时任务内实现延迟执行?

解决node-cron任务中延迟后函数未执行的问题

你的问题核心是代码里的wait(3000)没有定义——Node.js原生并不提供这个函数,直接await会触发未捕获的错误,而node-cron默认会吞掉任务内部的错误,导致后续的FakeGames.StopGame()根本没机会执行。

修复步骤:

  1. 封装Promise版延迟函数
    先在定时任务外部定义一个返回Promise的wait函数,让await能正确工作:

    function wait(ms) {
      return new Promise(resolve => setTimeout(resolve, ms));
    }
    
  2. 添加错误捕获
    给定时任务的异步逻辑加上try/catch,避免后续任务因为单次错误中断,同时方便排查问题:

    cron.schedule("*/10 * * * * *", async function() {
      try {
        FakeGames.StartGame();
        await wait(3000);
        FakeGames.StopGame();
      } catch (err) {
        console.error('定时任务执行异常:', err);
      }
    });
    

额外注意事项:

你的cron表达式*/10 * * * * *是每10秒触发一次任务,当前延迟3秒不会有并发问题,但如果后续StartGame/StopGame本身耗时较长,或者延迟时间调整后超过10秒,会导致多个任务实例同时运行。如果FakeGames的方法不支持并发执行,建议:

  • 调整cron间隔,确保前一个任务完全执行完毕后再触发下一次
  • 给任务加锁机制,比如用一个变量标记任务是否在运行,触发时先检查状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:40:44