function tryEach(tasks, callback) {
        var error = null;
        var result;
        return eachSeries$1(tasks, (task, taskCb) => {
            wrapAsync(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));
    }
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.
});