|
|
- 'use strict';
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = tryEach;
-
- var _noop = require('lodash/noop');
-
- var _noop2 = _interopRequireDefault(_noop);
-
- var _eachSeries = require('./eachSeries');
-
- var _eachSeries2 = _interopRequireDefault(_eachSeries);
-
- var _wrapAsync = require('./internal/wrapAsync');
-
- var _wrapAsync2 = _interopRequireDefault(_wrapAsync);
-
- var _slice = require('./internal/slice');
-
- var _slice2 = _interopRequireDefault(_slice);
-
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
- /**
- * It runs each task in series but stops whenever any of the functions were
- * successful. If one of the tasks were successful, the `callback` will be
- * passed the result of the successful task. If all tasks fail, the callback
- * will be passed the error and result (if any) of the final attempt.
- *
- * @name tryEach
- * @static
- * @memberOf module:ControlFlow
- * @method
- * @category Control Flow
- * @param {Array|Iterable|Object} tasks - A collection containing functions to
- * run, each function is passed a `callback(err, result)` it must call on
- * completion with an error `err` (which can be `null`) and an optional `result`
- * value.
- * @param {Function} [callback] - An optional callback which is called when one
- * of the tasks has succeeded, or all have failed. It receives the `err` and
- * `result` arguments of the last attempt at completing the `task`. Invoked with
- * (err, results).
- * @example
- * async.tryEach([
- * function getDataFromFirstWebsite(callback) {
- * // Try getting the data from the first website
- * callback(err, data);
- * },
- * function getDataFromSecondWebsite(callback) {
- * // First website failed,
- * // Try getting the data from the backup website
- * callback(err, data);
- * }
- * ],
- * // optional callback
- * function(err, results) {
- * Now do something with the data.
- * });
- *
- */
- function tryEach(tasks, callback) {
- var error = null;
- var result;
- callback = callback || _noop2.default;
- (0, _eachSeries2.default)(tasks, function (task, callback) {
- (0, _wrapAsync2.default)(task)(function (err, res /*, ...args*/) {
- if (arguments.length > 2) {
- result = (0, _slice2.default)(arguments, 1);
- } else {
- result = res;
- }
- error = err;
- callback(!err);
- });
- }, function () {
- callback(error, result);
- });
- }
- module.exports = exports['default'];
|