如何限制 Vue 中 Ajax 请求的并发数量?
我在用 Vue 做一个文件上传功能,需要同时上传多个文件,但不想让所有请求一起发出去,怕压垮服务器。试过直接用 Promise.all,结果一下子全发了,有没有办法控制最多同时发 3 个请求?
下面是我现在的代码,就是简单循环调用 uploadFile:
<script>
methods: {
async handleUpload(files) {
files.forEach(file => this.uploadFile(file));
},
uploadFile(file) {
return axios.post('/upload', file);
}
}
</script>
下面是一个简单的实现方式,用了 async 和 await 来控制并发:
这段代码的关键在于维护了一个
requestsInFlight数组,用来跟踪哪些请求正在处理。每次发起新请求前,检查这个数组的长度是否达到了最大并发数,如果达到了就用Promise.race等待其中任意一个请求完成后再继续发起新的请求。这样就能很好地控制并发数量了。