ifelseAsync
If a predicate function returns a truthy value, return
x; otherwise, returny.
Usage
var ifelseAsync = require( '@stdlib/utils/async/if-else' );
ifelseAsync( predicate, x, y, done )
If a predicate function returns a truthy value, returns x; otherwise, returns y.
var randu = require( '@stdlib/random/base/randu' ); function predicate( clbk ) { setTimeout( onTimeout, 0 ); function onTimeout() { clbk( null, randu() > 0.5 ); } } function done( error, result ) { if ( error ) { throw error; } console.log( result ); } ifelseAsync( predicate, 1.0, -1.0, done );
The predicate function is provided a single argument:
clbk: callback to invoke uponpredicatefunction completion.
The callback accepts two arguments:
error: error object.bool: condition used to determine whether to returnxory.
The done callback is invoked upon function completion and is provided at most two arguments:
error: error object.result: eitherxory.
Notes
- Execution is not guaranteed to be asynchronous. To guarantee asynchrony, wrap the
donecallback 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 ifelseAsync = require( '@stdlib/utils/async/if-else' ); var i; function next() { ifelseAsync( predicate, 'BOOP', 'beep', done ); } function predicate( clbk ) { setTimeout( onTimeout, 0 ); function onTimeout() { clbk( null, randu() > 0.9 ); } } function done( error, result ) { if ( error ) { throw error; } i += 1; console.log( result ); if ( i < 100 ) { return next(); } } i = 0; next();
See Also
@stdlib/utils/async/if-then: if a predicate function returns a truthy value, invokex; otherwise, invokey.@stdlib/utils/if-else: if a condition is truthy, returnx; otherwise, returny.