summaryrefslogtreecommitdiff
path: root/lib/reflectAll.js
blob: d1ad247bf2e9015bda6e1df8bd8684f491623389 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import reflect from './reflect';
import isArray from 'lodash/isArray';

/**
 * A helper function that wraps an array of functions with reflect.
 *
 * @name reflectAll
 * @static
 * @memberOf async
 * @see async.reflect
 * @category Util
 * @param {Array} tasks - The array of functions to wrap in `async.reflect`.
 * @returns {Array} Returns an array of functions, each function wrapped in
 * `async.reflect`
 * @example
 *
 * let tasks = [
 *     function(callback) {
 *         setTimeout(function() {
 *             callback(null, 'one');
 *         }, 200);
 *     },
 *     function(callback) {
 *         // do some more stuff but error ...
 *         callback(new Error('bad stuff happened'));
 *     },
 *     function(callback) {
 *         setTimeout(function() {
 *             callback(null, 'two');
 *         }, 100);
 *     }
 * ];
 *
 * async.parallel(async.reflectAll(tasks),
 * // optional callback
 * function(err, results) {
 *     // values
 *     // results[0].value = 'one'
 *     // results[1].error = Error('bad stuff happened')
 *     // results[2].value = 'two'
 * });
 */
export default function reflectAll(tasks) {
    var results;
    if (isArray(tasks)) {
        results = tasks.map(reflect);
    } else {
        var keys = Object.keys(tasks);
        results = {};
        keys.forEach(function(key) {
            results[key] = reflect.call(this, tasks[key])
        });
    }
    return results;
}