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; | ||
|  | }; | ||
|  | }; |