35 lines
		
	
	
		
			599 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
		
			599 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var defer = require('./defer.js'); | ||
|  | 
 | ||
|  | // API
 | ||
|  | module.exports = async; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Runs provided callback asynchronously | ||
|  |  * even if callback itself is not | ||
|  |  * | ||
|  |  * @param   {function} callback - callback to invoke | ||
|  |  * @returns {function} - augmented callback | ||
|  |  */ | ||
|  | function async(callback) | ||
|  | { | ||
|  |   var isAsync = false; | ||
|  | 
 | ||
|  |   // check if async happened
 | ||
|  |   defer(function() { isAsync = true; }); | ||
|  | 
 | ||
|  |   return function async_callback(err, result) | ||
|  |   { | ||
|  |     if (isAsync) | ||
|  |     { | ||
|  |       callback(err, result); | ||
|  |     } | ||
|  |     else | ||
|  |     { | ||
|  |       defer(function nextTick_callback() | ||
|  |       { | ||
|  |         callback(err, result); | ||
|  |       }); | ||
|  |     } | ||
|  |   }; | ||
|  | } |