| 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) | |