# trycatchAsync > If a function does not return an error, invoke a callback with the function result; otherwise, invoke a callback with a value `y`.
## Usage ```javascript var trycatchAsync = require( '@stdlib/utils/async/try-catch' ); ``` #### trycatchAsync( x, y, done ) If a function `x` does not return an error, invokes a `done` callback with the function result; otherwise, invokes a `done` callback with a value `y`. ```javascript var randu = require( '@stdlib/random/base/randu' ); function x( clbk ) { setTimeout( onTimeout, 0 ); function onTimeout() { if ( randu() > 0.5 ) { return clbk( null, 1.0 ); } clbk( new Error( 'oops' ) ); } } function done( error, result ) { if ( error ) { console.log( error.message ); } console.log( result ); } trycatchAsync( x, -1.0, done ); ``` The function `x` is provided a single argument: - `clbk`: callback to invoke upon function completion The callback accepts two arguments: - `error`: error object - `result`: function result The `done` callback is invoked upon function completion and is provided two arguments: - `error`: error object - `result`: either the result of `x` or the provided value `y` If the function `x` does not return a truthy `error` argument, the `error` argument provided to the `done` callback is `null`. If `x` does return a truthy `error` argument, the `done` callback is invoked with both the `error` and the provided value `y`.
## Notes - Execution is **not** guaranteed to be asynchronous. To guarantee asynchrony, wrap the `done` callback in a function which either executes at the end of the current stack (e.g., `nextTick`) or during a subsequent turn of the event loop (e.g., `setImmediate`, `setTimeout`).
## Examples ```javascript var randu = require( '@stdlib/random/base/randu' ); var trycatchAsync = require( '@stdlib/utils/async/try-catch' ); var i; function next() { trycatchAsync( x, 'beep', done ); } function x( clbk ) { setTimeout( onTimeout, 0 ); function onTimeout() { if ( randu() > 0.9 ) { return clbk( null, 'BOOP' ); } clbk( new Error( 'oops' ) ); } } function done( error, result ) { if ( error ) { console.log( error.message ); } i += 1; console.log( result ); if ( i < 100 ) { return next(); } } i = 0; next(); ```