Sha256: 5d80c57d0dbbeddc8dd56491164b0b581b5cac70461957507cd91b12f185d8a0
Contents?: true
Size: 633 Bytes
Versions: 74
Compression:
Stored size: 633 Bytes
Contents
'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); } }); };
Version data entries
74 entries across 74 versions & 6 rubygems