MCPcopy Create free account
hub / github.com/PrairieLearn/PrairieLearn / _eachOfLimit

Function _eachOfLimit

public/javascripts/async.js:291–332  ·  view source on GitHub ↗
(limit)

Source from the content-addressed store, hash-verified

289 };
290
291 function _eachOfLimit(limit) {
292
293 return function (obj, iterator, callback) {
294 callback = _once(callback || noop);
295 obj = obj || [];
296 var nextKey = _keyIterator(obj);
297 if (limit <= 0) {
298 return callback(null);
299 }
300 var done = false;
301 var running = 0;
302 var errored = false;
303
304 (function replenish () {
305 if (done && running <= 0) {
306 return callback(null);
307 }
308
309 while (running < limit && !errored) {
310 var key = nextKey();
311 if (key === null) {
312 done = true;
313 if (running <= 0) {
314 callback(null);
315 }
316 return;
317 }
318 running += 1;
319 iterator(obj[key], key, only_once(function (err) {
320 running -= 1;
321 if (err) {
322 callback(err);
323 errored = true;
324 }
325 else {
326 replenish();
327 }
328 }));
329 }
330 })();
331 };
332 }
333
334
335 function doParallel(fn) {

Callers 2

async.jsFile · 0.85
doParallelLimitFunction · 0.85

Calls 5

_onceFunction · 0.85
_keyIteratorFunction · 0.85
callbackFunction · 0.85
only_onceFunction · 0.85
iteratorFunction · 0.70

Tested by

no test coverage detected