JavaScript实现指定数量的并发限制

  • 作者:陈大鱼头
  • 首发地址: https://github.com/KRISACHAN/ying-study/issues
  • 说明:鱼头的学习记录

正文

在网上看到这么一道题:

2-1

这道题跟鱼头这篇记录『什么是时间分片(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
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值