2 module.exports = function(Promise) {
3 var util = require("./util");
4 var async = Promise._async;
5 var tryCatch = util.tryCatch;
6 var errorObj = util.errorObj;
8 function spreadAdapter(val, nodeback) {
10 if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);
12 tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));
13 if (ret === errorObj) {
14 async.throwLater(ret.e);
18 function successAdapter(val, nodeback) {
20 var receiver = promise._boundValue();
21 var ret = val === undefined
22 ? tryCatch(nodeback).call(receiver, null)
23 : tryCatch(nodeback).call(receiver, null, val);
24 if (ret === errorObj) {
25 async.throwLater(ret.e);
28 function errorAdapter(reason, nodeback) {
31 var newReason = new Error(reason + "");
32 newReason.cause = reason;
35 var ret = tryCatch(nodeback).call(promise._boundValue(), reason);
36 if (ret === errorObj) {
37 async.throwLater(ret.e);
41 Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,
43 if (typeof nodeback == "function") {
44 var adapter = successAdapter;
45 if (options !== undefined && Object(options).spread) {
46 adapter = spreadAdapter;