You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
|
- 'use strict';
- const pTry = require('p-try');
-
- module.exports = concurrency => {
- if (concurrency < 1) {
- throw new TypeError('Expected `concurrency` to be a number from 1 and up');
- }
-
- const queue = [];
- let activeCount = 0;
-
- const next = () => {
- activeCount--;
-
- if (queue.length > 0) {
- queue.shift()();
- }
- };
-
- return fn => new Promise((resolve, reject) => {
- const run = () => {
- activeCount++;
-
- pTry(fn).then(
- val => {
- resolve(val);
- next();
- },
- err => {
- reject(err);
- next();
- }
- );
- };
-
- if (activeCount < concurrency) {
- run();
- } else {
- queue.push(run);
- }
- });
- };
|