Spaces:
Paused
Paused
| ; | |
| 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; | |
| }; | |
| }; | |