我有一个可以在单击按钮时处理发送请求的功能,但是请求只是被“炸开”,我希望它们在时间上间隔开一些,例如相隔500毫秒。
这是我尝试过的:
function removeFile(filename) {
var ind;
filesinput.forEach(function(file, index) {
if(file.name == filename) {
ind = index;
}
});
filesinput.splice(ind, 1);
}
但是它不起作用,请求仍然被爆破。我已经在类似问题的另一个答案中看到了这种方法,并且我还在NodeJS端的自己的代码中使用了该方法,并且该方法可以在此处使用,但是我无法在React端使用它。
我也尝试过这个:
async function SendRequests() {
requestsToSend.forEach(async (request) => {
request.Send();
await new Promise((resolve) => setTimeout(resolve, 500));
});
}
这有点奏效,但他们仍然被炸毁。我猜这里正在发生的事情是,所有setTimeouts都排队,并且它们只是在同一时间计数。
答案 0 :(得分:0)
您可以根据请求索引安排超时:
function SendRequests() {
requestsToSend.forEach((request, index) => {
setTimeout(()=> { request.Send(); }, 500 * (index + 1))
});
}
答案 1 :(得分:0)
我要问的第一个问题是为什么您不希望同时发送所有请求?如果您这样做是为了确保您没有任何比赛条件,那么我不确定这是否是正确的处理方法。
但是,您可以通过设置时间间隔而不是超时来解决此问题。
let count = 0;
setInterval(() => { list[count].send(); count++ }, 500);