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; |