Skip to content

Instantly share code, notes, and snippets.

@tracker1
Last active December 30, 2021 08:12
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tracker1/987a389efa9e9ec632d1d5f6ea0d7772 to your computer and use it in GitHub Desktop.
Save tracker1/987a389efa9e9ec632d1d5f6ea0d7772 to your computer and use it in GitHub Desktop.
Node Promise + EventEmitter
module.exports = () => {
// break resolve and reject out of a promise
let resolve, reject;
const promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
// return as a future
return {
promise,
resolve,
reject,
};
};
const { EventEmitter } = require('events');
const createFuture = require('./future');
/**
* PromiseEmitter class - Combines Promise and EventEmitter
* @param {*} fn is a funtion that should accept (resolve, reject, emitter)
*/
function PromiseEmitter(fn) {
const { resolve, reject, promise } = createFuture();
// add eventemitter to promise
Object.assign(promise, EventEmitter.prototype);
EventEmitter.call(promise);
// run fn call out of band
setTimeout(() => fn.call(promise, resolve, reject, promise), 1);
return promise;
}
module.exports = PromiseEmitter;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment