并发请求【JavaScript】

什么是并发请求?

        并发请求是同时发送多个网络请求, 这样可以提高网络请求的效率和速度。

如何实现并发请求控制?

       需要考虑:

      1.边界情况的判定。2.请求发送和响应结果保存。3.补位操作。4.完成状态判断和并发数控制。

<body>
    <script src="./index.js"></script>
    <script>
        let usls = []
        for (let index = 1; index <= 20; index++) {
            usls.push(`https://jsonplaceholder.typicode.com/todos/${index}`)
        }
        concurRequest(usls, 3).then(res => {
            console.log(res)
        })
    </script>
</body>

实现一个函数concurRequest,返回一个Promise,函数传递一个urls数组和最大并发数。

/**
 * 
 * @param {string[]} urls 戴请求的url数组
 * @param {*} maxNum 最大并发数
 */
function concurRequest(urls, maxNum) {
    if (urls.length === 0) {
        return new Promise([])
    }
    return new Promise((resolve) => {
        let index = 0 // 下一个请求索引
        let length = 0 // 完成请求数
        let result = [] // 收集结果
        // 发送下一个请求 并将结果请求放到结果数组中
        async function _request() {
            if (index >= urls.length) {
                return
            }
            const temp = index
            const url = urls[index++]
            const res = await fetch(url)
            result[temp] = res
            length++
            if (length === urls.length) {
                return resolve(res)
            }
            _request()
        }
        for (let index = 1; index <= Math.min(maxNum, urls.length); index++) {
            _request()
        }
    })
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值