; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
var _eachSeries = require('./eachSeries.js'); | |
var _eachSeries2 = _interopRequireDefault(_eachSeries); | |
var _wrapAsync = require('./internal/wrapAsync.js'); | |
var _wrapAsync2 = _interopRequireDefault(_wrapAsync); | |
var _awaitify = require('./internal/awaitify.js'); | |
var _awaitify2 = _interopRequireDefault(_awaitify); | |
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|AsyncIterable|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). | |
* @returns {Promise} a promise, if no callback is passed | |
* @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; | |
return (0, _eachSeries2.default)(tasks, (task, taskCb) => { | |
(0, _wrapAsync2.default)(task)((err, ...args) => { | |
if (err === false) return taskCb(err); | |
if (args.length < 2) { | |
[result] = args; | |
} else { | |
result = args; | |
} | |
error = err; | |
taskCb(err ? null : {}); | |
}); | |
}, () => callback(error, result)); | |
} | |
exports.default = (0, _awaitify2.default)(tryEach); | |
module.exports = exports.default; |