36 lines
		
	
	
		
			931 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			931 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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;
 |