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.
		
		
		
		
		
			
		
			
				
					70 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					70 lines
				
				2.1 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |     value: true | ||
|  | }); | ||
|  | exports.default = race; | ||
|  | 
 | ||
|  | var _isArray = require('lodash/isArray'); | ||
|  | 
 | ||
|  | var _isArray2 = _interopRequireDefault(_isArray); | ||
|  | 
 | ||
|  | var _noop = require('lodash/noop'); | ||
|  | 
 | ||
|  | var _noop2 = _interopRequireDefault(_noop); | ||
|  | 
 | ||
|  | var _once = require('./internal/once'); | ||
|  | 
 | ||
|  | var _once2 = _interopRequireDefault(_once); | ||
|  | 
 | ||
|  | var _wrapAsync = require('./internal/wrapAsync'); | ||
|  | 
 | ||
|  | var _wrapAsync2 = _interopRequireDefault(_wrapAsync); | ||
|  | 
 | ||
|  | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Runs the `tasks` array of functions in parallel, without waiting until the | ||
|  |  * previous function has completed. Once any of the `tasks` complete or pass an | ||
|  |  * error to its callback, the main `callback` is immediately called. It's | ||
|  |  * equivalent to `Promise.race()`. | ||
|  |  * | ||
|  |  * @name race | ||
|  |  * @static | ||
|  |  * @memberOf module:ControlFlow | ||
|  |  * @method | ||
|  |  * @category Control Flow | ||
|  |  * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction} | ||
|  |  * to run. Each function can complete with an optional `result` value. | ||
|  |  * @param {Function} callback - A callback to run once any of the functions have | ||
|  |  * completed. This function gets an error or result from the first function that | ||
|  |  * completed. Invoked with (err, result). | ||
|  |  * @returns undefined | ||
|  |  * @example | ||
|  |  * | ||
|  |  * async.race([ | ||
|  |  *     function(callback) { | ||
|  |  *         setTimeout(function() { | ||
|  |  *             callback(null, 'one'); | ||
|  |  *         }, 200); | ||
|  |  *     }, | ||
|  |  *     function(callback) { | ||
|  |  *         setTimeout(function() { | ||
|  |  *             callback(null, 'two'); | ||
|  |  *         }, 100); | ||
|  |  *     } | ||
|  |  * ], | ||
|  |  * // main callback
 | ||
|  |  * function(err, result) { | ||
|  |  *     // the result will be equal to 'two' as it finishes earlier
 | ||
|  |  * }); | ||
|  |  */ | ||
|  | function race(tasks, callback) { | ||
|  |     callback = (0, _once2.default)(callback || _noop2.default); | ||
|  |     if (!(0, _isArray2.default)(tasks)) return callback(new TypeError('First argument to race must be an array of functions')); | ||
|  |     if (!tasks.length) return callback(); | ||
|  |     for (var i = 0, l = tasks.length; i < l; i++) { | ||
|  |         (0, _wrapAsync2.default)(tasks[i])(callback); | ||
|  |     } | ||
|  | } | ||
|  | module.exports = exports['default']; |