1s内控制向某个请求请求的次数
背景#
有的时候后端提供的接口对相同的IP进行限制,在某个时间内不能发送超过X条的请求,一旦超过指定的请求数会导致后续请求接口会出现异常。
效果#
需求#
比如:在1s内最多同时发送2个请求,多出来的请求在后续的1s或者后续的Ns中发起
代码#
<template>
<div class="app">
<el-divider content-position="center"
>1.1s内向某个IP最多发送2个请求</el-divider
>
<el-button type="primary" @click="send_request">发送请求</el-button>
</div>
</template>
<script>
import axios from 'axios'
export default {
data() {
return {}
},
methods: {
send_request() {
// 需要发送的请求个数
const need_send_request_num = 5
const queue_arr = []
/**
*
* @param total_request_num 需要向服务请求的总数
* @param max_request_num 向某个IP最大请求数量
* @param startIndex 第N个请求
*/
const foo = (total_request_num, max_request_num = 2, startIndex = 0) => {
if (startIndex >= total_request_num) {
// console.log('所有请求完成了')
// TODO:所有请求完成时
Promise.all(queue_arr).then((res) => {
console.log(res)
})
} else {
const endIndex =
startIndex + max_request_num > total_request_num
? total_request_num
: startIndex + max_request_num
let i = startIndex
for (; i < endIndex; i++) {
queue_arr.push(this.fetchData(i))
}
setTimeout(() => {
foo(total_request_num, max_request_num, i)
}, 1000)
}
}
foo(need_send_request_num)
},
async fetchData(index) {
const res = await axios.get('https://httpbin.org/get', {
params: {
index,
},
})
return res.data
},
},
}
</script>
<style lang="less" scoped>
.app {
padding: 40px;
}
</style>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!