reflect.js
1 'use strict'; 2 3 Object.defineProperty(exports, "__esModule", { 4 value: true 5 }); 6 exports.default = reflect; 7 8 var _initialParams = require('./internal/initialParams'); 9 10 var _initialParams2 = _interopRequireDefault(_initialParams); 11 12 var _wrapAsync = require('./internal/wrapAsync'); 13 14 var _wrapAsync2 = _interopRequireDefault(_wrapAsync); 15 16 function _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 */ 57 function 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 } 78 module.exports = exports['default'];