Skip to content

Instantly share code, notes, and snippets.

@lkleuver
Created July 14, 2017 09:54
Show Gist options
  • Save lkleuver/71a3b78bf190a23a2c74763455caf311 to your computer and use it in GitHub Desktop.
Save lkleuver/71a3b78bf190a23a2c74763455caf311 to your computer and use it in GitHub Desktop.
export function PromiseLimit(concurrency, promises) {
const count = promises.length;
concurrency = Math.min(concurrency, count);
let finished = 0;
const next = (resolve, reject) => {
let promise = promises.pop();
if (typeof promise === "undefined") {
if (finished === count) {
resolve();
}
} else {
promise().then(
v => {
finished++;
next(resolve, reject);
},
reject => reject();
);
}
};
return new Promise((resolve, reject) => {
for (let i = 0; i < concurrency; i++) {
next(resolve, reject);
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment