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