| var apply = require('./_apply'), | |
|     baseRest = require('./_baseRest'), | |
|     isError = require('./isError'); | |
| 
 | |
| /** | |
|  * Attempts to invoke `func`, returning either the result or the caught error | |
|  * object. Any additional arguments are provided to `func` when it's invoked. | |
|  * | |
|  * @static | |
|  * @memberOf _ | |
|  * @since 3.0.0 | |
|  * @category Util | |
|  * @param {Function} func The function to attempt. | |
|  * @param {...*} [args] The arguments to invoke `func` with. | |
|  * @returns {*} Returns the `func` result or error object. | |
|  * @example | |
|  * | |
|  * // Avoid throwing errors for invalid selectors. | |
|  * var elements = _.attempt(function(selector) { | |
|  *   return document.querySelectorAll(selector); | |
|  * }, '>_>'); | |
|  * | |
|  * if (_.isError(elements)) { | |
|  *   elements = []; | |
|  * } | |
|  */ | |
| var attempt = baseRest(function(func, args) { | |
|   try { | |
|     return apply(func, undefined, args); | |
|   } catch (e) { | |
|     return isError(e) ? e : new Error(e); | |
|   } | |
| }); | |
| 
 | |
| module.exports = attempt;
 |