

【手写题】实现一个批量请求函数 multiRequest(urls, maxNum)
source link: https://segmentfault.com/a/1190000040587870
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【手写题】实现一个批量请求函数 multiRequest(urls, maxNum)
- 要求最大并发数 maxNum
- 每当有一个请求返回,就留下一个空位,可以增加新的请求
- 所有请求完成后,结果按照 urls 里面的顺序依次打出
// 模拟请求 function request(url) { return new Promise((resolve) => { const time = Math.random() * 1000; setTimeout(() => resolve(url), time); }); } async function multiRequest(urls, maxNum) { let data = urls.map((url, index) => ({ index, url })) // 因为最终要按照顺序输出,所以给每个url追加一个index属性,用于记录在数组中的位置,确保按序输出 let result = [] // 存放结果的数组 // 巧用Array.from, length是开辟的数组长度,这个可以控制最大的并发数量。后面回调方法用于存放异步请求的函数 let promises = Array.from({ length: Math.min(maxNum,data.length) }, () => getChain(data, result)) // 利用Promise.all并发执行异步函数 await Promise.all(promises) // 通过函数参数接收最终的一个结果 return result } async function getChain(data, res = []) { // 利用队列的思想,一个个pop出来执行,只要urls还有,就继续执行 while (data.length) { let one = data.pop() try { let urlRes = await request(one.url) // 结果按照索引顺序存储 res[one.index] = urlRes } catch (e) { res[one.index] = e } } } // 调用 const urls = ['www.example1.com', 'www.example2.com', 'www.example3.com', 'www.example4.com', 'www.example5.com'] multiRequest(urls, 5).then(finalRes => { console.log('done', finalRes) })
Recommend
-
18
二次封装 requests,构造通用的请求函数 作者
-
15
来,我们手写一个简易版的mock.js吧(模拟fetch && Ajax请求)广发证券 技术工程师预期的mock的使用方式首先我们从使用的角度出发,思考编码过程...
-
4
本文基于 https://pomb.us/build-your-own-react/ 实现简单版 React。本文学习思路来自
-
4
关于合约函数请求异常的疑问求解 对...
-
6
面试官:请用Java实现一个HTTP请求-51CTO.COM 面试官:请用Java实现一个HTTP请求 作者:指北君 2022-04-08 08:26:03 今天将介绍一种在 Java 中执行 HTTP 请求的方法 -- 通过使用 Java 内置的 Htt...
-
8
本文最后更新于 269 天前,文中所描述的信息可能已发生改变更新一波文章。这次的内容相对简单点,初始化请求的过程包括封装 $_GET $_POST 等关联数组到 Request 对象中,用于后续流程的使用,以及从封装 Request...
-
3
【postman】使用postman生成快速批量请求 | XFF's blog 最近用户甩了一个excel过来,里面有300多位用户的信息,让给这些用户授权某些权限。由于系统上没有批量授权的功能,而且用户分布比较散乱,一个个找比较麻烦。而且授权接口中有对其他第三方...
-
6
手写JS-柯里化函数的实现更新日期: 2022-04-29阅读量: 626标签:
-
9
手写编程语言-递归函数是如何实现的? - crossoverJie - 博客园 本篇文章主要是记录一下在
-
9
Axum框架自动处理请求的神奇函数 解道Jdon ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK