Psi*_*Psi 7 javascript es6-promise
有没有实现的方式/模式let res = Promise.all([...p], limit)?
res应该在所有p结算后解决limit=3Promise应该并行运行limit并行运行的解析器.特别是最后一点让我头疼.
我目前的解决方案是将promises-array拆分为limit大小的块并将它们链接起来.这里的缺点是第二组在第1组的所有Promise都已解决后才开始.
n = limit我想出了创建并行运行并附加只要有承诺的链的想法:
let promises = [];
for(let i=0; i<11; i++) promises[i] = () => {
console.log('Construct:',i);
return new Promise(resolve => {
setTimeout(function() {
console.log('Resolve:',i);
resolve(i);
}, Math.round(Math.random() * (2000 - 500) + 2000));
});
}
function parallelLimit(promiseFactories, limit) {
let result = [];
let cnt = 0;
function chain(promiseFactories) {
if(!promiseFactories.length) return;
let i = cnt++; // preserve order in result
return promiseFactories.shift()().then((res) => {
result[i] = res; // save result
return chain(promiseFactories); // append next promise
});
}
let arrChains = [];
while(limit-- > 0 && promiseFactories.length > 0) {
// create `limit` chains which run in parallel
arrChains.push(chain(promiseFactories));
}
// return when all arrChains are finished
return Promise.all(arrChains).then(() => result);
}
parallelLimit(promises, 4).then(console.log);Run Code Online (Sandbox Code Playgroud)
很高兴阅读您的评论和建议:)
| 归档时间: |
|
| 查看次数: |
3578 次 |
| 最近记录: |