You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							59 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							59 lines
						
					
					
						
							1.6 KiB
						
					
					
				"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;
 | 
						|
};
 | 
						|
};
 |