$ cnpm install ensure-async
Wrap an async function and ensure it calls its callback on a later tick of the event loop. Based on async#ensureAsync as module.
npm install ensure-async --save
If you want to use in the browser (powered by Browserify):
bower install ensure-async --save
and later link in your HTML:
<script src="bower_components/ensure-async/dist/ensure-async.js"></script>
var ensureAsync = require('ensure-async');
function sometimesAsync(arg, callback) {
if (cache[arg]) {
return callback(null, cache[arg]); // this would be synchronous!!
} else {
doSomeIO(arg, callback); // this IO would be asynchronous
}
}
// this has a risk of stack overflows if many results are cached in a row
async.mapSeries(args, sometimesAsync, done);
// this will defer sometimesAsync's callback if necessary,
// preventing stack overflows
async.mapSeries(args, ensureAsync(sometimesAsync), done);
Wrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (RangeError: Maximum call stack size exceeded) and generally keeping Zalgo contained.
Arguments
fn - an async function, one that expects a node-style callback as its last argumentReturns a wrapped function with the exact same call signature as the function passed in.
MIT © Kiko Beats
Copyright 2013 - present © cnpmjs.org | Home |