我在Node.js中编写一个应用程序,需要安排在未来几小时或有时几天运行的功能。目前,我正在这样做:
(1, 12, 123, 1234, 456, 56, 7, 3456, 234567)
Input = "1234567"
我想知道const now = Date.now();
const later = getSomeFutureTimestamp();
setTimeout(function() {
// do something
}, later - now);
是否适合这项工作,或者是否有更适合长时间间隔的工具。有一点需要注意的是,我不需要很高的精确度;如果工作在预定时间的几分钟内运行,一切都应该没问题。
答案 0 :(得分:2)
setTimeout
应该没问题。如果阻止代码在其执行意图执行时正在运行,那么它才会真正延迟。所以setTimeout
通常晚了20 毫秒。但由于你的保证金是几分钟,我不认为这是一个问题。
但是,我建议存储触发事件的时间戳,并定期检查。这样,您在任何给定时间只能运行1个计时器。
您还可以将时间戳保留为绝对时间戳 - 而不是相对的,"未来的毫秒数"值。这也允许您在服务器重新启动之间存储它们,您可以轻松地在相对时间内执行这些操作。使用您的代码,排队作业的唯一记录是运行的计时器。如果该计时器因任何原因消失,您将丢失已安排的作业的所有记录。
类似的东西:
setTimeout
你只需要开始一次。这可以在function checkForScheduledJobs() {
var now = Date.now(),
job;
// assuming here that the jobs array is sorted earliest to latest
while(jobs.length && jobs[0].timestamp < now) {
jobs.shift().callback();
}
setTimeout(checkForScheduledJobs, 60000); // check each minute
}
函数中完成(在向其中添加内容之后也可以对addScheduledJob
数组进行排序等)。