node/deps/npm/node_modules/promise-call-limit/index.js
Myles Borins 2e54524955
deps: update npm to 7.0.0-rc.3
PR-URL: https://github.com/nodejs/node/pull/35474
Reviewed-By: Ruy Adorno <ruyadorno@github.com>
Reviewed-By: Ujjwal Sharma <ryzokuken@disroot.org>
Reviewed-By: Ben Coe <bencoe@gmail.com>
Reviewed-By: Geoffrey Booth <webmaster@geoffreybooth.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Shelley Vohr <codebytere@gmail.com>
Reviewed-By: Guy Bedford <guybedford@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2020-10-07 09:59:49 -04:00

44 lines
768 B
JavaScript

const defLimit = require('os').cpus().length
const callLimit = (queue, limit = defLimit) => new Promise((res, rej) => {
let active = 0
let current = 0
const results = []
let rejected = false
const reject = er => {
if (rejected)
return
rejected = true
rej(er)
}
let resolved = false
const resolve = () => {
if (resolved || active > 0)
return
resolved = true
res(results)
}
const run = () => {
const c = current++
if (c >= queue.length) {
return resolve()
}
active ++
results[c] = queue[c]().then(result => {
active --
results[c] = result
run()
return result
}, reject)
}
for (let i = 0; i < limit; i++) {
run()
}
})
module.exports = callLimit