Skip to content

Instantly share code, notes, and snippets.

@rohanBagchi
Created April 27, 2018 04:38
Show Gist options
  • Select an option

  • Save rohanBagchi/2413c09c5161ff2653a77bbcc33dd137 to your computer and use it in GitHub Desktop.

Select an option

Save rohanBagchi/2413c09c5161ff2653a77bbcc33dd137 to your computer and use it in GitHub Desktop.
var PENDING = 1;
var RESOLVED = 2;
var REJECTED = 3;
var PENDING = 1;
var RESOLVED = 2;
var REJECTED = 3;
function Promise(executorFunction) {
var status = PENDING;
var success_callbacks = [];
var error_callbacks = [];
this.then = function (successCallback) {
success_callbacks.push(successCallback);
return this;
};
this.catch = function (errorCallback) {
error_callbacks.push(errorCallback);
return this;
};
var resolve = function (value) {
if (status !== PENDING) return;
try {
success_callbacks.forEach(cb => cb.call(null, value));
success_callbacks = [];
status = RESOLVED;
} catch (e) {
this.reject(e);
}
};
var reject = function (err) {
if (status !== PENDING) return;
error_callbacks.forEach(cb => cb.call(null, err));
error_callbacks = [];
status = REJECTED;
};
executorFunction && executorFunction.call(null, resolve, reject);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment