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