多个请求之间有for循环和超时

时间:2018-10-27 20:56:48

标签: javascript node.js

我有一个可以多次触发请求的功能,但是需要在每次之间添加延迟,这样我才不会向服务器发送垃圾邮件。

async function multiReq(iterationNr){

    for (let i=0; i++; iterationNr ) {
    //send request here
    res.push(resultOfTheRequest);
    }
    return res;
};
console.log(multiReq(10));

我应该在哪里超时,以便例如要求1,请等待1秒,要求2,请等待1秒直到完成,然后返回res数组?

2 个答案:

答案 0 :(得分:3)

一种选择是await Promise,只要您需要添加延迟,它就会在1秒后解析:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
async function multiReq(iterationNr){
  const res = [];
  for (let i=0; i < iterationNr; i++) {
    // If you don't need to wait for the response to come back yet, remove the await:
    const result = await makeRequest();
    await delay(1000);
    res.push(result);
  }
  return res;
}

还请注意,for循环的第二个条件是 ,第三次是 incrementer ,相反,该功能块{{1} }结束后不应包含分号。

答案 1 :(得分:0)

我发现,如果您使用的是http 1.1,并且在请求的标头中放置了“ Connection:close”(默认为“ keep-alive”),则不需要延迟,并且可以将其触发为您可以按照这种方式请求许多请求。