| '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']; |