Implementing a basic Promise in JavaScript

https://blog.vixlet.com/implementing-a-basic-promise-in-javascript-b740a122d2b3

by Yury

JavaScript

var _MY_PROMISE_PENDING = 0;
var _MY_PROMISE_RESOLVED = 1;
var _MY_PROMISE_REJECTED = 2;
function MyPromise(executor) {
  var state = _MY_PROMISE_PENDING;
  var value = null;
  var handle = null;

  try {
    executor(function(_val) {
      state = _MY_PROMISE_RESOLVED;
      value = _val;
      if(handle) {
        handle(_val);
      }
    });
  } catch(error) {
    state = _MY_PROMISE_REJECTED;
    value = error.message;
  }
  return {
    then: function(fn) {
      if (state === _MY_PROMISE_PENDING) {
        handle = fn;
      } else if (state === _MY_PROMISE_RESOLVED) {
        fn(value);
      }
    },
    catch: function(fn) {
      if (state === _MY_PROMISE_REJECTED) {
        fn(value);
      }
    }
  };
}


delay().then(function(response) {
	alert('Promised!');
});

function delay() {
	return new MyPromise(function(resolve,reject) {
		setTimeout(function() {
			resolve('success');
			//reject('error');
		},2000);
	});
}


/*
var helloIfNotSithLord = name => {
  return new Promise((resolve, reject) => {
    if (['Vader', 'Sidious', 'Maul'].indexOf(name) > -1) {
      reject('go away!');
    }
    resolve(`hello, ${name}`);
  });
};
*/