最近在群里看到一个问题 定时器一次执行两个 执行完成后在执行下一个
写了一个有功能相当于一样的的代码 但是不是一次执行两个 而是后面执行的 拿前面执行时间较小的时间 然后让执行时间相加,当做这次执行的时间,把相加后的时间代替刚刚拿的较小时间,然后继续前面的操作,代码如下
let count = 0;
let list = [];
function addTask(timeout, data) {
count++;
if (count > 2) {
list.sort((a, b) => {
return a < b ? -1 : 1;
});
list[0] += timeout;
setTimeout(() => {
count--;
console.log(data, new Date() - time);
}, list[0]);
return
} else {
list.push(timeout);
}
setTimeout(() => {
count--;
console.log(data, new Date() - time);
}, timeout);
}
const time = new Date();
addTask(1000, 1);
addTask(500, 2);
addTask(300, 3);
addTask(400, 4);