美文网首页
请求并发控制数量

请求并发控制数量

作者: Cherry丶小丸子 | 来源:发表于2023-09-06 19:34 被阅读0次
/**
 * 最大请求并发数,返回Promise
 * @param {string[]} urls 请求urls数组
 * @param {number} maxNum 最大请求数量
 * @returns {Promise<any[]>} Promise
 */
function concurRequest(urls, maxNum) {
    return new Promise(resolve => {
        // 当 urls 数组为 0 时直接结束
        if (urls.length === 0) {
            resolve([]);
            return;
        }
        const results = []; // 存储每个请求的结果
        let index = 0; // 下一个请求的下标
        let count = 0; // 请求完成的数量,包括成功和失败

        // 发出请求
        async function request() {
            // 当请求等于 urls 数组长度,结束不在继续发请求了
            if (index === urls.length) {
                return;
            }

            const i = index; // 记录当前发出请求的下标
            const url = urls[index];
            index++; // 每发出一个请求,下标加1

            try {
                const value = await fetch(url);
                results[i] = value;
            } catch (error) {
                results[i] = error;
            } finally {
                count++;
                // 当完成请求的数量等于urls的长度时,结束
                if (count === urls.length) {
                    resolve(results);
                }
                request(); // 每个请求结束后继续发请求
            }
        }

        // 取urls的长度和与maxNum的最小値,发出请求
        const times = Math.min(maxNum, urls.length);
        for (let i = 0; i < times; i++) {
            request();
        }
    });
}


const urls = [];
for(let i = 1; i <= 20; i++){
    urls.push(`https://jsonplaceholder.typicode.com/todos/${i}`)
}

concurRequest(urls, 3).then(res => {
    console.log(res);
})

相关文章

  • ab压测基本命令

    ab [options] url options. -n 请求数量-c 并发数-H 请求头-p POS...

  • python多线程并发数量控制

    python多线程如果不进行并发数量控制,在启动线程数量多到一定程度后,会造成线程无法启动的错误。控制多线程并发数...

  • GCD 文章理解

    GCD详解 1,GCD如何控制线程的最大并发数? (1,通过信号量的大小控制线成并发执行的数量) (2,一定数量的...

  • 系统容量估算

    概念 QPS: 系统每秒中的请求数量并发数:单台服务器同时处理请求的数量响应时间: 请求开发到返回的处理时间 预...

  • 简单易懂的DispatchSemaphore

    DispatchSemaphore 信号量,一种用来控制并发访问资源的机制,多用于多线程中,可以控制并发线程数量。...

  • iOS GCD 控制并发数量

    使用 实现 另一种实现

  • JAVA控制线程并发数量

    JAVA控制线程并发数量方法主要有,限制一个线程使用(synchronized),限制指定数量的线程并发使用(Se...

  • 压力测试

    压力测试需要注意点: 并发数 请求文件的大小和请求数量的笛卡尔积 在请求数相同的情况下,最大支持的用户并发数 压力...

  • 异步请求并发控制

    目的 一次添加几个异步处理,每次最多只能并行执行多少个。 思路 并发有一定的数量控制,所以后加的需要有一个队列存储...

  • 前端请求并发控制

    题目:请实现如下函数,可以批量请求数据。所有的url地址都在urls参数中,同时可以通过max控制请求的并发度,当...

网友评论

      本文标题:请求并发控制数量

      本文链接:https://www.haomeiwen.com/subject/jakcvdtx.html