Promises in POJS
Example on how to implement promises pattern
by dpecos
HTML
<div id="logs"></div>
JavaScript
function Promise(promise) {
if (promise instanceof Promise) {
return promise;
} else {
// this is a new promise chain
this.callbacks = [];
}
}
Promise.prototype.then = function(callback_ok, callback_error) {
this.callbacks.push({
ok: callback_ok,
error: callback_error
});
return this;
};
Promise.prototype.resolve = function() {
var callback = this.callbacks.shift();
if (callback && callback.ok) {
callback.ok.apply(this, arguments);
}
};
Promise.prototype.reject = function() {
var callback = this.callbacks.shift();
if (callback && callback.error) {
callback.error.apply(this, arguments);
}
};
// ----- Helper functions -----
function log_i(msg) {
var e = document.createElement('div');
e.innerHTML = msg;
document.getElementById('logs').appendChild(e);
}
function log_e(msg) {
log_i("Error: " + msg);
}
// ----- Our dummy busines operations functions -----
function operation(value) {
var promise = new Promise(this);
setTimeout(function() {
promise.resolve(value + 1);
}, 100);
return promise;
};
var operation1 = operation;
var operation2 = operation;
var operation3 = operation;
var failingOoperation2 = function(value) {
var promise = new Promise(this); // passing "this" allows to chain promises
setTimeout(function() {
promise.reject("Ups!");
}, 300);
return promise;
};
// ----- Chained promises examples -----
operation1(0).then(failingOoperation2).then(operation3, log_e).then(log_i);
operation1(0).then(operation2).then(operation3).then(log_i);