const mySetTimeout = (callback = () => { }, delay = 0) => {
let hasRun = false;
let leftTime = delay;
let timer = window.setTimeout(() => {
hasRun = true;
callback();
}, leftTime);
let startTime = + new Date();
return {
pause: () => {
if (hasRun) {
return;
}
const currentTime = + new Date();
leftTime = leftTime - (currentTime - startTime);
window.clearTimeout(timer);
},
continue: () => {
if (hasRun) {
return;
}
startTime = + new Date();
timer = window.setTimeout(() => {
hasRun = true;
callback();
}, leftTime);
}
}
}
const timer = mySetTimeout(() => {
console.log('hello, world!');
}, 10000);
timer.pause();
timer.continue();