Path: blob/master/node_modules/async.util.eachoflimit/index.js
1126 views
var once = require('async.util.once');1var noop = require('async.util.noop');2var onlyOnce = require('async.util.onlyonce');3var keyIterator = require('async.util.keyiterator');45module.exports = function eachOfLimit(limit) {6return function(obj, iterator, cb) {7cb = once(cb || noop);8obj = obj || [];9var nextKey = keyIterator(obj);10if (limit <= 0) {11return cb(null);12}13var done = false;14var running = 0;15var errored = false;1617(function replenish() {18if (done && running <= 0) {19return cb(null);20}2122while (running < limit && !errored) {23var key = nextKey();24if (key === null) {25done = true;26if (running <= 0) {27cb(null);28}29return;30}31running += 1;32iterator(obj[key], key, onlyOnce(function(err) {33running -= 1;34if (err) {35cb(err);36errored = true;37} else {38replenish();39}40}));41}42})();43};44};454647