fix handling of errors in promises

This commit is contained in:
Leo Horie 2014-03-21 23:20:47 -04:00
parent 45b13165f6
commit 77d5484169
6 changed files with 48 additions and 22 deletions

View file

@ -307,14 +307,20 @@ new function(window) {
var next = m.deferred()
if (!success) success = identity
if (!error) error = identity
resolvers.push(function(value) {
var result = success(value)
next.resolve(result !== undefined ? result : value)
})
rejecters.push(function(value) {
var result = error(value)
next.reject(result !== undefined ? result : value)
})
function push(list, method, callback) {
list.push(function(value) {
try {
var result = callback(value)
next[method](result !== undefined ? result : value)
}
catch (e) {
if (e instanceof Error && e.constructor !== Error) throw e
else next.reject(e)
}
})
}
push(resolvers, "resolve", success)
push(rejecters, "reject", error)
return next.promise
}
return object