请求并发控制简易版,没考虑非常全面,主打一个方便各位理解实现思路,并且还可以根据自己业务场景,再进一步封装。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
</style>
</head>
<body>
</body>
<script>
let urls = [
'http://127.0.0.1:5520/user?id=',
'http://127.0.0.1:5520/user?id=',
'http://127.0.0.1:5520/user?id=',
'http://127.0.0.1:5520/user?id=',
'http://127.0.0.1:5520/user?id=',
'http://127.0.0.1:5520/user?id=',
'http://127.0.0.1:5520/user?id=',
'http://127.0.0.1:5520/user?id=',
'http://127.0.0.1:5520/user?id=',
'http://127.0.0.1:5520/user?id=',
]
/**
* 并发控制
* @param {string[]} urls // 待请求地址列表
* @param {number} max // 最大并发数
*/
function concurrencyControl(urls, max = 2) {
let index = 0
function _run() {
if (index > urls.length - 1) return
let idx = index
index++
fetch(urls[idx] + idx)
.then(res => res.json())
.then(data => {
console.log(data);
}).finally(() => {
_run()
})
}
for (let i = 0; i < max; i++) {
_run()
}
}
concurrencyControl(urls)
</script>
</html>
因为不想录制gif,就直接截图的。凑合着看吧
可以看到,初始只发生两个请求,当请求状态响应后,递归发送下一个请求,以达到控制请求并发数量