Skip to content

Instantly share code, notes, and snippets.

@oliverfoster
Last active January 1, 2024 20:10
Show Gist options
  • Save oliverfoster/00897f4552cef64653ef14d8b26338a6 to your computer and use it in GitHub Desktop.
Save oliverfoster/00897f4552cef64653ef14d8b26338a6 to your computer and use it in GitHub Desktop.
Deferred promise
class DeferredPromise extends Promise {
constructor(def = (res, rej)=>{}) {
let res, rej;
super((resolve, reject)=>{
def(resolve, reject);
res = resolve;
rej = reject;
});
this.resolve = res;
this.reject = rej;
this.isCancelled = false;
}
cancel(err) {
this.isCancelled = true;
this.reject(err || new Error("Cancelled deferred promise."));
}
defer(task) {
this.task = task;
}
async execute(...args) {
if (!this.task) {
return this.reject(new Error("No task defined in deferred promise."));
}
try {
args.push(this);
const value = await this.task.call(this, ...args);
this.resolve(value);
} catch(err) {
this.reject(err);
}
}
}
module.exports = DeferredPromise;
@FaberM
Copy link

FaberM commented Jan 1, 2024

I totally understand, thanks for you time 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment