forEachAsync
As I do every few years, I decided to rewrite FuturesJS.
This year's remake is extremely lightweight.
v3.x - Diet Cola Edition
(published on npm as beta, so you must use the @3.x - and don't worry, v2.x is still supported)
Analogous to [].forEach
, but handles items asynchronously with a final callback passed to then
.
This is the most essential piece of the ArrayAsync
package.
Usage
It's as simple as you could guess:
function getPics(animal, cb) {
var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
$.getJSON(
flickerAPI
, { tags: thing
, tagmode: "any"
, format: "json"
, success: function (data) {
console.log('teh animals:', data);
}
, complete: cb
}
);
}
forEachAsync(['dogs', 'cats', 'octocats'], function (next, element, index, array) {
getPics(element, next);
}).then(function () {
console.log('All requests have finished');
});
Browser Installation
You can download and include forEachAsync.js
:
<script src="https://raw.github.com/FuturesJS/forEachAsync/master/forEachAsync.js"></script>
(function () {
'use strict';
var forEachAsync = window.forEachAsync
;
}());
Or you can build it alongside other libraries:
npm install -g pakmanager
npm install forEachAsync@3.x --save
pakmanager -e browser build
<script src="pakmanaged.js"></script>
(function () {
'use strict';
var forEachAsync = require('forEachAsync').forEachAsync
;
}());
Node Installation
npm install --save forEachAsync@3.x
API
forEachAsync(array, callback[, thisArg])
Parameters
array
Array of elements to iterate overcallback
Function to execute for each element, takes 4 arguments
next
the function to call when the current element has been dealt withelement
a single element of the aforementioned arrayindex
the index of the current elementarray
the same array mentioned above
thisArg
Object to use as this
when executing callback
forEachAsync#then(done)
Parameters
then
is in the return value of forEachAsync
and accepts a final done
callback.
done
called after forEachAsync
is complete, takes no arguments
Internal API
forEachAsync.__BREAK
This is used internally for the purposes of the ArrayAsync
library.
Please don't break
stuff; use someAsync
or everyAsync
instead.