|
|
||
|---|---|---|
| .. | ||
| docs | ||
| lib | ||
| package.json | ||
| README.md | ||
Waterfall
Execute functions in series, passing the results of one function as arguments to the next function.
Usage
var waterfall = require( '@stdlib/utils/async/series-waterfall' );
waterfall( fcns, clbk[, thisArg] )
Executes functions in series, passing the results of one function as arguments to the next function.
function foo( next ) {
next( null, 'beep' );
}
function bar( str, next ) {
console.log( str );
// => 'beep'
next();
}
function done( error ) {
if ( error ) {
throw error;
}
}
var fcns = [ foo, bar ];
waterfall( fcns, done );
To set the this context for all functions in the provided function array, provide a thisArg.
function foo( next ) {
this.idx = 0;
next( null, 'beep' );
}
function bar( str, next ) {
this.idx += 1;
console.log( str );
// => 'beep'
next();
}
function done( error ) {
if ( error ) {
throw error;
}
console.log( ctx.idx );
// => 1
}
var ctx = {};
var fcns = [ foo, bar ];
waterfall( fcns, done, ctx );
waterfall.factory( fcns, done[, thisArg] )
Returns a reusable waterfall function.
function foo( next ) {
next( null, 'beep' );
}
function bar( str, next ) {
console.log( str );
// => 'beep'
next();
}
function done( error ) {
if ( error ) {
throw error;
}
}
var fcns = [ foo, bar ];
var run = waterfall.factory( fcns, done );
run();
run();
run();
Notes
- The last argument applied to each waterfall
functionis a callback. The callback should be invoked upon a seriesfunctioncompletion. The first argument is reserved as anerrorargument (which can benull). Any results which should be passed to the nextfunctionin the series should be provided beginning with the second argument. - If any
functioncalls the provided callback with a truthyerrorargument, the waterfall suspends execution and immediately calls thedonecallback for subsequenterrorhandling. - This implementation does not guarantee that execution is asynchronous. To do so, wrap the
donecallback in afunctionwhich 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 replace = require( '@stdlib/string/replace' );
var waterfall = require( '@stdlib/utils/async/series-waterfall' );
function foo( next ) {
next( null, 'beep' );
}
function bar( str, next ) {
console.log( str );
next( null, replace( str, 'e', 'o' ) );
}
function fun( str, next ) {
console.log( str );
next();
}
function done( error ) {
if ( error ) {
throw error;
}
console.log( 'done' );
}
var fcns = [ foo, bar, fun ];
waterfall( fcns, done );