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
			| 
								 
											3 years ago
										 
									 | 
							
								"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;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								};
							 |