Control flow ala ES7 async/await using ES6 generator (thanks to tj/co) with async.js (v2) signatures
async-co provide javascript async/await (through ES6 generator & co) equivalent signatures of the excellent async workflow library.
async-co 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-co/queue.js a look
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.
Nothing special here
// = eachLimit concurrency = 1
// = eachLimit concurrency = arr.length
Nothing special here neither
// = eachOfLimit concurrency = 1
// = eachOfLimit concurrency = dict.length
const eachLimit = require('async-co/eachLimit');
co(function *() {
var stuffs = [1,2,3, 5, 7]
yield eachLimit(stuffs, 2, function*(id){
yield dootherStuffs(id);
});
});
Return a QueueObject you can push task into.
Wait for thunk to process task (wait for worker, if needed)
const queue = require('async-co/queue');
const fetch = require('node-fetch');
var q = queue(fetch, 1); //let's be nice
co(function *() {
yield q.push("http://example.com/stuff.json");
});
co(function *() {
yield q.push("http://example.com/otherstuff.json"); //will wait for stuff to be retrieved
});
Throttle any function that return a promise, sugar syntax helper for async-co/queue
const throttle = require('async-co/throttle');
var fetch = require('node-fetch');
fetch = throttle(fetch, 1); //make fetch behave nicely
co(function *() {
yield fetch("http://example.com/stuff.json");
});
co(function *() {
yield fetch("http://example.com/otherstuff.json"); //will wait for stuff.json to be retrieved
});
- Get rich or die tryin'
- write a working async-co/cargo (see the challenge on stackoverflow)
- 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-co/queue, with a different API
async/await, ES6 generators, co, async-co, promise, Promises, yield, async, queue, map, throttle, "Let's have a beer & talk in Paris"