我自己写了一个控制最大并发数的promise,但是不知道为什么不管我是并发1个还是并发10个,最后执行的时间都一样,我觉得逻辑上没有问题,就是在promise完成后调用.then()方法然后开启下一个调用,目前找不出问题到底出在哪,有无大佬帮忙指出一下,感谢!
var createPromises = function (n) {
return new Array(n).fill().map((_, index) => {
return new Promise((res, rej) => {
setTimeout(() => {
res(`第${index + 1}个完成`)
}, Math.floor(Math.random() * n))
})
})
}
var conPromise = function (promises, n) {
let sumLen = promises.length
return new Promise((res, rej) => {
let retArr = [], retCount = 0
for (let c = 0; c < n; c++) {
goNext(retArr, c)
}
async function goNext(retArr, index) {
if (promises.length === 0) {
if (retCount === sumLen) {
res(retArr);
}
return;
}
promises.shift().then((val) => {
retCount++
retArr[index] = val
let nextIndex = sumLen - promises.length
goNext(retArr, nextIndex)
}).catch(err => {
rej(err)
})
}
})
}
conPromise(createPromises(100), 10).then((retArr) => {
console.log('并发返回结果👇');
retArr.forEach(r => {
console.log(r);
});
});
这是并发1个的
这是并发10个的