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

    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.

    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

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