任务调度器是一个程序,它可以自动执行预定的任务,例如定期备份数据、定时发送邮件、清理临时文件等。任务调度器可以帮助我们提高工作效率,减少手动操作的时间和错误。
以下是用JavaScript实现一个简单的任务调度器的代码,其中包含了详细的注释说明:
//定义一个任务调度器类
class TaskScheduler {
constructor() {
//任务列表,用来存储待执行的任务
this.tasks = [];
//定时器ID,用来清除定时器
this.timerId = null;
}
//添加任务方法,参数为任务函数和执行时间(毫秒)
addTask(taskFn, delay) {
//将任务函数和执行时间封装为一个对象
const task = { taskFn, delay };
//将任务对象加入任务列表
this.tasks.push(task);
}
//启动任务调度器
start() {
//如果已经有定时器在运行,则先清除定时器
if (this.timerId) {
clearInterval(this.timerId);
}
//调用定时器函数,将任务列表作为参数传入
this.timerId = setInterval(() => {
this.runTasks(this.tasks);
}, 1000); //每秒执行一次任务列表中的任务
}
//执行任务列表中的任务
runTasks(tasks) {
//遍历任务列表
tasks.forEach((task, index) => {
//如果当前时间大于等于任务的执行时间,说明该任务需要执行
if (Date.now() >= task.delay) {
//执行任务函数
task.taskFn();
//从任务列表中删除已执行的任务
tasks.splice(index, 1);
}
});
}
}
//创建一个任务调度器实例
const taskScheduler = new TaskScheduler();
//添加任务
taskScheduler.addTask(() => {
console.log("Task 1 executed at", new Date());
}, 5000); //5秒后执行
taskScheduler.addTask(() => {
console.log("Task 2 executed at", new Date());
}, 10000); //10秒后执行
taskScheduler.addTask(() => {
console.log("Task 3 executed at", new Date());
}, 15000); //15秒后执行
//启动任务调度器
taskScheduler.start();
在上面的代码中,我们定义了一个TaskScheduler类,它包含了添加任务、启动任务调度器和执行任务的方法。在创建TaskScheduler实例之后,我们通过addTask方法添加了三个任务,分别在5秒、10秒和15秒后执行。最后,调用start方法启动任务调度器,它将每秒执行一次任务列表中的任务。当任务执行时间到达时,它们将被从任务列表中删除。