Skip to content

Instantly share code, notes, and snippets.

@kandelakig
Created November 3, 2012 12:01
Show Gist options
  • Select an option

  • Save kandelakig/4007178 to your computer and use it in GitHub Desktop.

Select an option

Save kandelakig/4007178 to your computer and use it in GitHub Desktop.
Promises API implementation in 1 hour
function defer() {
var handlers = [];
var value;
var error;
return {
promise: {
then: function(callback, errback) {
var d = defer()
if (value) {
if (callback) {
try {
d.resolve(callback(value));
} catch (e) {
d.reject(e);
}
} else {
d.resolve(value);
}
} else if (error) {
if (errback) {
try {
d.resolve(errback(error));
} catch (e) {
d.reject(e);
}
} else {
d.reject(e);
}
} else {
handlers.push({
resolved: callback,
rejected: errback,
defered: d
})
}
return d.promise;
}
},
resolve: function(val) {
value = val;
handlers.forEach(function(handler){
try {
if (handler.resolved) {
handler.defered.resolve(handler.resolved(val));
} else {
handler.defered.resolve(val);
}
} catch (e) {
handler.defered.reject(e);
}
})
},
reject: function(err) {
error = err;
handlers.forEach(function(handler){
try {
if (handler.rejected) {
handler.defered.resolve(handler.rejected(val));
} else {
handler.defered.reject(val);
}
} catch (e) {
handler.defered.reject(e);
}
})
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment