- 作者:陈大鱼头
- 首发地址: https://github.com/KRISACHAN/ying-study/issues
- 说明:鱼头的学习记录
正文
在网上看到这么一道题:
这道题跟鱼头这篇记录『什么是时间分片(Time Slicing)?』有点相似,但不同的是这次是限制异步并发的数量。
所以话不多说,我们先来康康实现
首先我们来实现一个分割数组的函数~
const group = (list = [], max = 0) => {
if (!list.length) {
return list
}
let results = []
for (let i = 0, len = list.length; i < len; i += max) {
results.push(list.slice(i, i + max))
}
return results
}
这里就是根据指定的并发数量来分割数组。主要就是for
+ slice
,这没啥好说的
接下来我们再来一个用async
+ await
实现的请求集合封装。
我们通Promise.allSettled
去执行每一组的请求集合。
Promise.allSettled
是一个新的API,跟Promise.all
差不多的用法,也是接受的数组,不过不同的是Promise.allSettled
会等所有任务结束之后才会返回结果,而Promise.all
只要有一个reject
就会返回结果。
const requestHandler = async (
groupedUrl = [],
callback = () => {
}
) => {
if (!groupedUrl.length