前端实现并发

首先我们来说一下什么叫做并发,并发是指在一定的时间范围内进行着多次执行请求,也就是类似我们的三行到,就可以简单的理解为三个并发,但是这只是从一定的参考上去衡量,单时间片很小很小的时候,也就是小刀只够执行一次任务的时候,实际上并发还是单次执行!他只是在很小的时间范围内去来回切换执行而已!

function request(par){ return new Promise((resolve)=>setTimeout(resolve(`执行${par}`),1000)) } async function concurrent(task, max = 3) { let pools = [] for (let i = 0; i < task.length; i++) { console.log(task[i]) pools.push(request(task[i])) if (pools.length === max) { console.log(pools,i) await Promise.race(pools).then(res => { console.log(res) }).finally(() => { pools.pop() }) } } } concurrent(new Array(10).fill(1).map((item,index)=>index))()

整体代码比较简单,当pools中的数据也链接数一样的,开始执行并发任务,执行完一个之后剔除,再加入,再次执行,这样就可以简单的模拟一个并发,当然我们还有最后不满3个任务的时候,没有实现,但是一个简单的并发基本完成,如果感兴趣,自己也可以试试,加深印象!