-
Notifications
You must be signed in to change notification settings - Fork 2
Pause Resume
DigitalBrainJS edited this page Oct 17, 2021
·
1 revision
See the live demo
import CPromise from 'c-promise';
function cancelableDelay(ms, value){
return new CPromise(function(resolve, reject, {onCancel, onPause, onResume}){
let timestamp= Date.now();
let timeLeft;
let timer= setTimeout(resolve, ms, value);
onPause(()=>{
console.log(`Pause`);
clearTimeout(timer);
timer=0;
timeLeft= ms - (Date.now()- timestamp);
timestamp= Date.now();
});
onResume(()=>{
console.log(`Resume`);
timer= setTimeout(resolve, timeLeft, value);
});
onCancel(()=>{
console.log(`Cancel`);
timer && clearTimeout(timer);
})
});
}
const chain= cancelableDelay(1000, 123)
.then(
value=> console.log(`Done:`, value),
err=> console.warn(`Fail: ${err}`)
);
setTimeout(()=>{
chain.pause();
setTimeout(()=>{
chain.resume();
}, 5000);
}, 100);