JavaScript - Promises - Error Handling
JavaScript - Promises - Error Handling
by Nirvanachain
HTML
<!-- Helpful Article:
http://mattgreer.org/articles/promises-in-wicked-detail/?utm_source=javascriptweekly&utm_medium=email
-->
<a href="http://mattgreer.org/articles/promises-in-wicked-detail/?utm_source=javascriptweekly&utm_medium=email" target="_blank">Helpful Article</a>
<div id="log-container"></div>
JavaScript
// logging function so we can avoid console.log and alert
function log(varargs) {
var args = Array.prototype.slice.call(arguments, 0);
var message = args.join(" ");
var container = document.getElementById('log-container');
var messageDiv = document.createElement('div');
messageDiv.innerHTML = message;
container.appendChild(messageDiv);
}
function Promise(fn) {
var state = 'pending';
var value;
var deferred = null;
function resolve(newValue) {
try {
if (newValue && typeof newValue.then === 'function') {
newValue.then(resolve, reject);
return;
}
state = 'resolved';
value = newValue;
if (deferred) {
handle(deferred);
}
} catch (e) {
reject(e);
}
}
function reject(reason) {
state = 'rejected';
value = reason;
if (deferred) {
handle(deferred);
}
}
function handle(handler) {
if (state === 'pending') {
deferred = handler;
return;
}
var handlerCallback;
if (state === 'resolved') {
handlerCallback = handler.onResolved;
} else {
handlerCallback = handler.onRejected;
}
if (!handlerCallback) {
if (state === 'resolved') {
handler.resolve(value);
} else {
handler.reject(value);
}
return;
}
var ret;
try {
ret = handlerCallback(value);
handler.resolve(ret);
} catch (e) {
handler.reject(e);
}
}
this.then = function (onResolved, onRejected) {
return new Promise(function (resolve, reject) {
handle({
onResolved: onResolved,
onRejected: onRejected,
resolve: resolve,
reject:...