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}`);
});
};
*/