summaryrefslogtreecommitdiffstats
path: root/node_modules/mongoose/lib/helpers/parallelLimit.js
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
commite06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch)
tree55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/mongoose/lib/helpers/parallelLimit.js
downloadwebsite_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip
api, login, auth
Diffstat (limited to 'node_modules/mongoose/lib/helpers/parallelLimit.js')
-rw-r--r--node_modules/mongoose/lib/helpers/parallelLimit.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/node_modules/mongoose/lib/helpers/parallelLimit.js b/node_modules/mongoose/lib/helpers/parallelLimit.js
new file mode 100644
index 0000000..9b07c02
--- /dev/null
+++ b/node_modules/mongoose/lib/helpers/parallelLimit.js
@@ -0,0 +1,55 @@
+'use strict';
+
+module.exports = parallelLimit;
+
+/*!
+ * ignore
+ */
+
+function parallelLimit(fns, limit, callback) {
+ let numInProgress = 0;
+ let numFinished = 0;
+ let error = null;
+
+ if (limit <= 0) {
+ throw new Error('Limit must be positive');
+ }
+
+ if (fns.length === 0) {
+ return callback(null, []);
+ }
+
+ for (let i = 0; i < fns.length && i < limit; ++i) {
+ _start();
+ }
+
+ function _start() {
+ fns[numFinished + numInProgress](_done(numFinished + numInProgress));
+ ++numInProgress;
+ }
+
+ const results = [];
+
+ function _done(index) {
+ return (err, res) => {
+ --numInProgress;
+ ++numFinished;
+
+ if (error != null) {
+ return;
+ }
+ if (err != null) {
+ error = err;
+ return callback(error);
+ }
+
+ results[index] = res;
+
+ if (numFinished === fns.length) {
+ return callback(null, results);
+ } else if (numFinished + numInProgress < fns.length) {
+ _start();
+ }
+ };
+ }
+}