а вот, кому точность до миллисекунд на длиных таймаутах ?
function setMyTimer(_t, interval){
_t.start=Date.now();
_t.interval=_t.interval||interval;
_t.log_interval=_t.log_interval || 1000;
function log(){
const diff=_t.interval - (Date.now() - _t.start);
if(_t.log)_t.log(diff);
if(diff>_t.log_interval)
setTimeout(log,_t.log_interval);
else {
setTimeout(_t.main,diff<0?1:diff);
}
}
setTimeout(log,_t.log_interval);
}
setMyTimer({
main: ()=>console.log('test1'),
log: (diff)=>console.log('1:осталось '+diff+' ms ')
//, interval : 1200000
//, log_interval: 500
}, 50000);
setMyTimer({
main: ()=>console.log('test2'),
log: (diff)=>console.log('2:осталось '+diff+' ms ')
//, interval : 1200000
//, log_interval: 500
}, 20000);
setMyTimer({
main: ()=>console.log('test3'),
// log: (diff)=>console.log('2:осталось '+diff+' ms ')
//, interval : 1200000
//, log_interval: 500
}, 5000);