Spaces:
Building
Building
function promiseAllStepN (n, list) { | |
let tail = list.splice(n) | |
let head = list | |
let resolved = [] | |
let processed = 0 | |
return new Promise(resolve => { | |
head.forEach(x => { | |
let res = x() | |
resolved.push(res) | |
res.then(y => { | |
runNext() | |
return y | |
}) | |
}) | |
function runNext () { | |
if (processed == tail.length) { | |
resolve(Promise.all(resolved)) | |
} else { | |
resolved.push(tail[processed]().then(x => { | |
runNext() | |
return x | |
})) | |
processed++ | |
} | |
} | |
}) | |
} | |
module.exports = n => list => promiseAllStepN(n, list) | |