Javascript 如何控制请求的数量?

Javascript 如何控制请求的数量?,javascript,promise,Javascript,Promise,我必须将一个大文件分成数百个上传部分,然后将这些上传部分上传到服务器上 如何控制最多5个同时请求的上载请求数 this.uploadFileChunks.map(uploadPart => doUpload)... 如果您想将上传限制为5个同时请求,您可以使用;例如: async.mapLimit(this.uploadParts,5,(part,onDone)=>{ axios.post(/*…*/)//或任何您想要使用的API 。然后((res)=>onDone(未定义,res))

我必须将一个大文件分成数百个上传部分,然后将这些上传部分上传到服务器上

如何控制最多5个同时请求的上载请求数

this.uploadFileChunks.map(uploadPart => doUpload)...

如果您想将上传限制为5个同时请求,您可以使用;例如:

async.mapLimit(this.uploadParts,5,(part,onDone)=>{
axios.post(/*…*/)//或任何您想要使用的API
。然后((res)=>onDone(未定义,res))
.接住(onDone)
},(错误,结果)=>{
//如果err未定义,则结果是
//回复,或者你称之为onDone回调的任何东西
//有。
});
另一种方法(相当合理)是让您的
this.uploadParts
数组包含不超过5个元素,并使用
async.map
而不受限制


希望这能有所帮助。

将您的数据分发到几个包中,然后开始上传每个包:

让N=347//记录总数
设M=5//您想要的行李数量
//让我很快模拟你的数据。。。
让数据=数组(N)
对于(变量i=0;idoUpload)
}

// ... 或更高版本
这类似于节流。通过搜索“节流承诺”或“承诺限制”,您应该能够在npm中找到一些库。我发现了以下几点:

另外,这里有一个简单的实现:

//只允许函数一次运行一定次数。如果
//如果达到该数字,将对其他函数调用进行排队并等待
//直到一个点打开。
//
//n(int):并发运行的承诺数
//f(函数):必须返回一个承诺。
恒流=(n,f)=>{
设numRunning=0
让队列=[]
const runOne=({args,resolve,reject})=>{
numRunning++
返回f.apply(null,args)
。然后(结果=>{
numRunning--
if(队列长度){
runOne(queue.pop())
}
解决(结果)
})
.catch(错误=>{
if(队列长度){
runOne(queue.pop())
}
拒绝(错误)
})
}
返回(…参数)=>{
返回新承诺((解决、拒绝)=>{
如果(numRunning>=n){
push({args,resolve,reject})
}
否则{
runOne({args,resolve,reject})
}
})
}
}
然后,您的解决方案将如下所示:

const doUploadLimited=nConcurrent(5,doUpload)
this.uploadParts.map(doUploadLimited)

到目前为止,您尝试了什么?可能会有帮助。这能回答你的问题吗?我很抱歉。此项目中不允许使用第三方库。请查看源代码并尝试理解它。理解asyncjs背后的代码本身就是一件非常好的事情。对复杂的逻辑有些困惑。让我花更多的时间在你的解决方案上。谢谢lot@newBike我只是举个例子。尽管我已经对上述内容进行了单元测试,但您可能最好使用我链接到的某个库或您在npm上找到的另一个库。