循环遍历React中的数组,并在迭代之间暂停

时间:2020-08-02 11:48:04

标签: reactjs

我有一个可以在单击按钮时处理发送请求的功能,但是请求只是被“炸开”,我希望它们在时间上间隔开一些,例如相隔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都排队,并且它们只是在同一时间计数。

2 个答案:

答案 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);