Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

async-aa

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

async-aa

ES7 control flow with async.js (v2) signatures

  • 1.5.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1
Maintainers
1
Weekly downloads
 
Created
Source

Control flow for ES7 async/await with async.js (v2) signatures

Build Status Coverage Status Version License

Motivation

async-aa provide javascript async/await equivalent signatures of the excellent async workflow library.

Module are exported in standard commonJS module format and written in pure ES7 strict format. (no transpilation required nor used). Use browserify if you need async-aa modules in a browser environnement.

async-aa is not a wrapper on async, but rather leverages the full potential of native async/await & promises contract. Code tend to be small & very efficient (far more simplier than using callbacks), just give async-aa/queue.js a look

Addition to the async library signatures / promise pooling

  • Generator cannot use arrow function binding style, yet it might be usefull to bind async-aa closure, therefore, you can use an extra optional args to all signature to set generator binding context. (i.e. as in native .forEach )
  • Per design, it's easy to "throttle" a function that return a Promise ; checkout the "throttle" API for a way to make an ultra simple http request pooling.
  • async logic allow async/each to iterate through array AND objects. Per design sanify, async-aa does not. Use each/eachLimit/eachSeries for array, eachOf/eachOfLimit/eachOfSeries for collections.

API

async-aa/eachLimit(arr, concurrency, *thunk [, thisobj])

Nothing special here

async-aa/eachSeries(arr, *thunk [, thisobj] )

// = eachLimit concurrency = 1

async-aa/each(arr, *thunk [, thisobj])

// = eachLimit concurrency = arr.length

async-aa/eachOfLimit (dict, concurrency, *thunk [, thisobj])

Nothing special here neither

async-aa/eachOfSeries(dict, *thunk [, thisobj])

// = eachOfLimit concurrency = 1

async-aa/eachOf(dict, *thunk [, thisobj])

// = eachOfLimit concurrency = dict.length

const eachLimit    = require('async-aa/eachLimit');

(async function *() {

  var stuffs = [1,2,3, 5, 7]

  await eachLimit(stuffs, 2, function*(id){
      await dootherStuffs(id);
  });

})();

async-aa/setImmediate(fn)

Call a function in javascript next tick (using setImmediate API, or timeout 0 pollyfill)

q = async-aa/queue(*thunk, concurrency)

Return a QueueObject you can push task into.

await q.push(task)

Wait for thunk to process task (wait for worker, if needed)

const queue    = require('async-aa/queue');
const fetch    = require('node-fetch');

var q = queue(fetch, 1); //let's be nice

co(function *() {
  await q.push("http://example.com/stuff.json");
});

co(function *() {
  await q.push("http://example.com/otherstuff.json"); //will wait for stuff to be retrieved
});

async-aa/throttle

Throttle any function that return a promise, sugar syntax helper for async-aa/queue

const throttle = require('async-aa/throttle');
var  fetch     = require('node-fetch');
fetch = throttle(fetch, 1); //make fetch behave nicely

co(function *() {
  await fetch("http://example.com/stuff.json");
});

co(function *() {
  await fetch("http://example.com/otherstuff.json"); //will wait for stuff.json to be retrieved
});

Tests

async-aa is tested against async test suite.

TODO

Credits

  • 131
  • not dependant upon, yet relying on co
  • inspired from the excellent async

Alternatives / relatives

  • koa-async ; a clever Promisify wrapper on top of async (but not leveraging the full potential of ES7 async/await capabilities)
  • caolan/async/asyncify.js goes the same as koa-async.
  • es6-promise-pool ; equivalent to async-aa/queue, with a different API

Shoutbox, keywords, SEO love

async/await, async-aa, promise, Promises, await, async, queue, map, throttle, "Let's have a beer & talk in Paris"

Keywords

FAQs

Package last updated on 02 Nov 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc