美文网首页
前端请求并发控制

前端请求并发控制

作者: liuniansilence | 来源:发表于2019-03-18 14:54 被阅读0次

题目:请实现如下函数,可以批量请求数据。所有的url地址都在urls参数中,同时可以通过max控制请求的并发度,当所有请求结束后,调用callback回调函数。请求直接用fetch就可以。

直接上代码:

var urls = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
const limit = 5;

// 主函数
function sendRequest(urls, limit , callback) {
    function _send (urls) {
        return fetch(urls.shift())
            .finally(() => {
                if(urls.length) {
                    return _send(urls)
                }
            })
    }
    let asyncList = [];
    while(limit--) {
        asyncList.push(_send(urls));
    }
    return Promise.all(asyncList).then(callback);
}

sendRequest(urls, limit, function() {
    console.log('finish')
});

用setTimeout改写后测试一波,如下:

var urls = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
const limit = 5;

function sendRequest(urls, limit , callback) {
    function _send (urls) {
        const url = urls.shift();
        if(url) {
            return new Promise((resolve, reject) => {
                setTimeout(()=>{
                    console.log(`当前发送:${url}`);
                    resolve(url);
                }, 10)
            })
            .finally(() => {
                if(urls.length > 0) {
                    return _send(urls)
                }
            })
        }
       
    }
    let asyncList = [];
    while(limit--) {
        asyncList.push(_send(urls));
    }
    return Promise.all(asyncList).then(callback);
}

sendRequest(urls, limit, function() {
    console.log('all urls sended!')
});

Nodejs输入一波结果:

➜  Desktop node 1.js
当前发送:1
当前发送:2
当前发送:3
当前发送:4
当前发送:5
当前发送:6
当前发送:7
当前发送:8
当前发送:9
当前发送:10
当前发送:11
当前发送:12
当前发送:13
当前发送:14
当前发送:15
当前发送:16
当前发送:17
当前发送:18
当前发送:19
当前发送:20
all urls sended!
➜  Desktop 

相关文章

  • 前端请求并发控制

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

  • springmvc

    整体过程 发起请求到前端控制器(DispatcherServlet) 前端控制器请求HandlerMapping查...

  • SpringMVC请求过程

    springMVC框架原理 发起请求到前端控制器, 前端控制器请求handlerMapping查找Handler,...

  • springMVC面试题

    1:springMVC工作原理 【用户发送请求到前端控制器dispatcherservlet,前端控制器接收到请求...

  • 记一道控制并发数的前端面试题【转掘金】

    记一道控制并发数的前端面试题【手动维护 HTTP 请求排队】 题目 原文来自掘金https://juejin.im...

  • 5. SpringMVC基础

    SpringMVC架构 用户发送请求至前端控制器DispatcherServlet,前端控制器收到请求后调用Han...

  • 使用promise实现并发控制

    在前端优化性能的时候, 我们可以考虑使用并发控制比如首页有10个并发请求, 先发送3个, 3个中哪一个响应了, 立...

  • SpringMVC解析

    SpringMVC步骤: 第一步:发起请求到前端控制器(DispatcherServlet)第二步:前端控制器请求...

  • SpringMVC 请求流程描述

    1、前端发起请求到前端控制器DispatcherServlet2、DispatcherServlet 会请求处理器...

  • SpringMvc

    一、 第一步:发起请求到前端控制器(dispatcherServlet) 第二步:前端控制器请求handlerMa...

网友评论

      本文标题:前端请求并发控制

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