46 líneas
764 B
JavaScript
46 líneas
764 B
JavaScript
'use strict';
|
|
var onetime = require('onetime');
|
|
var setImmediateShim = require('set-immediate-shim');
|
|
|
|
module.exports = function (arr, next, cb) {
|
|
var failed = false;
|
|
var count = 0;
|
|
|
|
cb = cb || function () {};
|
|
|
|
if (!Array.isArray(arr)) {
|
|
throw new TypeError('First argument must be an array');
|
|
}
|
|
|
|
if (typeof next !== 'function') {
|
|
throw new TypeError('Second argument must be a function');
|
|
}
|
|
|
|
var len = arr.length;
|
|
|
|
if (!len) {
|
|
cb();
|
|
return;
|
|
}
|
|
|
|
function callback(err) {
|
|
if (failed) {
|
|
return;
|
|
}
|
|
|
|
if (err !== undefined && err !== null) {
|
|
failed = true;
|
|
cb(err);
|
|
return;
|
|
}
|
|
|
|
if (++count === len) {
|
|
cb();
|
|
return;
|
|
}
|
|
}
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
setImmediateShim(next, arr[i], i, onetime(callback, true));
|
|
}
|
|
};
|