Node.js中如何在node-cron定时任务内实现延迟执行?
解决node-cron任务中延迟后函数未执行的问题
你的问题核心是代码里的wait(3000)没有定义——Node.js原生并不提供这个函数,直接await会触发未捕获的错误,而node-cron默认会吞掉任务内部的错误,导致后续的FakeGames.StopGame()根本没机会执行。
修复步骤:
封装Promise版延迟函数
先在定时任务外部定义一个返回Promise的wait函数,让await能正确工作:function wait(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }添加错误捕获
给定时任务的异步逻辑加上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
相关产品推荐
相关产品推荐

