/* * @Description: 定期執行任務 * @Autor: kindring * @Date: 2021-09-02 14:24:58 * @LastEditors: kindring * @LastEditTime: 2021-09-02 16:23:43 * @LastDescript: */ // 定义任务队列 class Task { constructor() { this.taskList = new Object(null) this.taskId = 1 this.preSigns = new Object(null) } // 添加任务 add(fn, option) { // let baseTaskData = { // // 需要完成的前置变量条件 // pres: [], // // 等待时间 // waitTime: 0, // handel: ()=>{} // } // 先将任务添加到任务队列中去 let id = this.taskId if (option) { if (option.pre) { if (typeof option.pre == 'string') { option.pre = [option.pre] } option.pre.forEach(val => { if (this.preSigns[val]) { this.preSigns[val].tasks.push(id) } else { this.preSigns[val] = { val: false, tasks: [id] } } }) } } this.taskList[id] = { fn: fn, option: option } this.taskId++; // 尝试运行任务, this.runTask(id) return this; } change(preSign) { let preData = this.preSigns[preSign]; if (preData) { preData.val = true // 尝试找出任务有问题的 this.checkPre(preData); } return this; } recover(preSign) { let preData = this.preSigns[preSign]; if (preData) { preData.val = false } return this; } checkPre(preData) { preData.tasks.forEach(id => { if (this.taskList[id]) { this.runTask(id) } }) return this; } // 直接运行,嘗試直接執行任務 run() { return this; } /** * 执行指定id的任务 * @param {*} id 任务id * @returns */ runTask(id) { let task = this.taskList[id] // console.log(task); if (task) { try { if (task.option) { let isPass = task.option.pre.every(pre => this.preSigns[pre].val) if (isPass) { task.fn() this.removePre(task, id) .removeTask(id) } } else { //执行任务 task.fn() this.removePre(task, id) .removeTask(id) } } catch (error) { this.errorHandel(error) } } return this; } removePre(task, id) { if (task.option && task.option.pre) { task.option.pre.forEach(pre => { this.preSigns[pre].tasks = this.preSigns[pre].tasks.filter(taskId => id != taskId) }) } // return this } removeTask(id) { delete this.taskList[id] return this } errorHandel(err) { console.error('出現錯誤') console.error(err) return this } } export default Task;