M
// Asynchronous map (iterate parallel)
// items - <Array>, incoming
// fn - <Function>, to be executed for each value in the array
// current - <any>, current element being processed in the array
// callback - <Function>
// err - <Error> | <null>
// value - <any>
// done - <Function>, on done
// err - <Error> | <null>
// result - <Array>
const map = (items, fn, done) => {
const len = items.length;
if (!len) {
done(null, []);
return;
}
let errored = false;
let count = 0;
const result = new Array(len);
const next = (index, err, value) => {
if (errored) return;
if (err) {
errored = true;
done(err);
return;
}
result[index] = value;
count++;
if (count === len) done(null, result);
};
for (let i = 0; i < len; i++) {
fn(items[i], next.bind(null, i));
}
};
https://github.com/metarhia/metasync/blob/master/lib/array.js