ensure-async
Wrap an async function and ensure it calls its callback on a later tick of the event loop.
Last updated 11 years ago by kikobeats .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install ensure-async 
SYNC missed versions from official npm registry.

ensure-async

Last version Dependency status Dev Dependencies Status NPM Status Gratipay

Wrap an async function and ensure it calls its callback on a later tick of the event loop. Based on async#ensureAsync as module.

Install

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>

Usage

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

API

ensureAsync(fn)

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 argument

Returns a wrapped function with the exact same call signature as the function passed in.

License

MIT © Kiko Beats

Current Tags

  • 1.0.0                                ...           latest (11 years ago)

2 Versions

  • 1.0.0                                ...           11 years ago
  • 0.1.0                                ...           11 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 1
Dependencies (2)
Dependents (1)

Copyright 2013 - present © cnpmjs.org | Home |