UNPKG

2.26 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = reflect;
7
8var _initialParams = require('./internal/initialParams');
9
10var _initialParams2 = _interopRequireDefault(_initialParams);
11
12var _wrapAsync = require('./internal/wrapAsync');
13
14var _wrapAsync2 = _interopRequireDefault(_wrapAsync);
15
16function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
18/**
19 * Wraps the async function in another function that always completes with a
20 * result object, even when it errors.
21 *
22 * The result object has either the property `error` or `value`.
23 *
24 * @name reflect
25 * @static
26 * @memberOf module:Utils
27 * @method
28 * @category Util
29 * @param {AsyncFunction} fn - The async function you want to wrap
30 * @returns {Function} - A function that always passes null to it's callback as
31 * the error. The second argument to the callback will be an `object` with
32 * either an `error` or a `value` property.
33 * @example
34 *
35 * async.parallel([
36 * async.reflect(function(callback) {
37 * // do some stuff ...
38 * callback(null, 'one');
39 * }),
40 * async.reflect(function(callback) {
41 * // do some more stuff but error ...
42 * callback('bad stuff happened');
43 * }),
44 * async.reflect(function(callback) {
45 * // do some more stuff ...
46 * callback(null, 'two');
47 * })
48 * ],
49 * // optional callback
50 * function(err, results) {
51 * // values
52 * // results[0].value = 'one'
53 * // results[1].error = 'bad stuff happened'
54 * // results[2].value = 'two'
55 * });
56 */
57function reflect(fn) {
58 var _fn = (0, _wrapAsync2.default)(fn);
59 return (0, _initialParams2.default)(function reflectOn(args, reflectCallback) {
60 args.push((error, ...cbArgs) => {
61 let retVal = {};
62 if (error) {
63 retVal.error = error;
64 }
65 if (cbArgs.length > 0) {
66 var value = cbArgs;
67 if (cbArgs.length <= 1) {
68 [value] = cbArgs;
69 }
70 retVal.value = value;
71 }
72 reflectCallback(null, retVal);
73 });
74
75 return _fn.apply(this, args);
76 });
77}
78module.exports = exports['default'];
\No newline at end of file