corrade-nucleus-nucleons
/script-kiddie/002_script_kiddie/script-kiddie/node_modules/bluebird/js/release/nodeify.js |
@@ -0,0 +1,58 @@ |
"use strict"; |
module.exports = function(Promise) { |
var util = require("./util"); |
var async = Promise._async; |
var tryCatch = util.tryCatch; |
var errorObj = util.errorObj; |
|
function spreadAdapter(val, nodeback) { |
var promise = this; |
if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); |
var ret = |
tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); |
if (ret === errorObj) { |
async.throwLater(ret.e); |
} |
} |
|
function successAdapter(val, nodeback) { |
var promise = this; |
var receiver = promise._boundValue(); |
var ret = val === undefined |
? tryCatch(nodeback).call(receiver, null) |
: tryCatch(nodeback).call(receiver, null, val); |
if (ret === errorObj) { |
async.throwLater(ret.e); |
} |
} |
function errorAdapter(reason, nodeback) { |
var promise = this; |
if (!reason) { |
var newReason = new Error(reason + ""); |
newReason.cause = reason; |
reason = newReason; |
} |
var ret = tryCatch(nodeback).call(promise._boundValue(), reason); |
if (ret === errorObj) { |
async.throwLater(ret.e); |
} |
} |
|
Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback, |
options) { |
if (typeof nodeback == "function") { |
var adapter = successAdapter; |
if (options !== undefined && Object(options).spread) { |
adapter = spreadAdapter; |
} |
this._then( |
adapter, |
errorAdapter, |
undefined, |
this, |
nodeback |
); |
} |
return this; |
}; |
}; |