summaryrefslogtreecommitdiff
path: root/lib/internal/parallel.js
blob: bbfdb423c74a7670e20bc222ae0c9e9f8507bd49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import isArrayLike from './isArrayLike';
import noop from './noop';
import slice from './slice';
import wrapAsync from './wrapAsync';

export default function _parallel(eachfn, tasks, callback) {
    callback = callback || noop;
    var results = isArrayLike(tasks) ? [] : {};

    eachfn(tasks, function (task, key, callback) {
        wrapAsync(task)(function (err, result) {
            if (arguments.length > 2) {
                result = slice(arguments, 1);
            }
            results[key] = result;
            callback(err);
        });
    }, function (err) {
        callback(err, results);
    });
}