Promise.all 限制并发
Posted 左手121
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Promise.all 限制并发相关的知识,希望对你有一定的参考价值。
实现
function PromiseLimit(funcs, limit = 5)
const list = [...funcs]
const result = []
const executing = []
function queue()
const func = list.shift()
if (!func) return Promise.all(executing)
const promise = func()
result.push(promise)
const e = promise.then(() =>
executing.splice(executing.indexOf(e), 1)
)
executing.push(e)
if (executing.length >= limit)
return Promise.race(executing).then(() => queue())
return Promise.resolve().then(() => queue())
return queue().then(() => Promise.all(result))
测试
const result = []
for (let index = 0; index < 10; index++)
result.push(function ()
return new Promise((resolve, reject) =>
console.log(`开始$index`, new Date().toLocaleString())
setTimeout(() =>
if (Math.random() > 0.5)
resolve(index)
else
reject(index)
console.log(`结束$index`, new Date().toLocaleString())
, parseInt(Math.random() * 1000))
)
)
PromiseLimit(result).then(
data =>
console.log('成功', data)
,
data =>
console.log('失败', data)
,
)
以上是关于Promise.all 限制并发的主要内容,如果未能解决你的问题,请参考以下文章