corrade-nucleus-nucleons
/script-kiddie/002_script_kiddie/script-kiddie/node_modules/bluebird/js/release/catch_filter.js |
@@ -0,0 +1,42 @@ |
"use strict"; |
module.exports = function(NEXT_FILTER) { |
var util = require("./util"); |
var getKeys = require("./es5").keys; |
var tryCatch = util.tryCatch; |
var errorObj = util.errorObj; |
|
function catchFilter(instances, cb, promise) { |
return function(e) { |
var boundTo = promise._boundValue(); |
predicateLoop: for (var i = 0; i < instances.length; ++i) { |
var item = instances[i]; |
|
if (item === Error || |
(item != null && item.prototype instanceof Error)) { |
if (e instanceof item) { |
return tryCatch(cb).call(boundTo, e); |
} |
} else if (typeof item === "function") { |
var matchesPredicate = tryCatch(item).call(boundTo, e); |
if (matchesPredicate === errorObj) { |
return matchesPredicate; |
} else if (matchesPredicate) { |
return tryCatch(cb).call(boundTo, e); |
} |
} else if (util.isObject(e)) { |
var keys = getKeys(item); |
for (var j = 0; j < keys.length; ++j) { |
var key = keys[j]; |
if (item[key] != e[key]) { |
continue predicateLoop; |
} |
} |
return tryCatch(cb).call(boundTo, e); |
} |
} |
return NEXT_FILTER; |
}; |
} |
|
return catchFilter; |
}; |