I\'m toying with promises in JavaScript and tried to promisify setTimeout function:
function timeout(ms) {
return new Promise(function(resolve, reject) {
This is my answer in TypeScript:
private sleep(ms) {
let timerId, endTimer;
class TimedPromise extends Promise {
isCanceled: boolean = false;
cancel = () => {
endTimer();
clearTimeout(timerId);
this.isCanceled = true;
};
constructor(fn) {
super(fn);
}
}
return new TimedPromise(resolve => {
endTimer = resolve;
timerId = setTimeout(endTimer, ms);
});
}
Usage:
const wait = sleep(10*1000);
setTimeout(() => { wait.cancel() },5 * 1000);
await wait;