【问题标题】:multiple requests with for loop and timeout between each多个请求之间有 for 循环和超时
【发布时间】:2019-07-22 03:03:18
【问题描述】:

我有一个函数可以多次触发请求,但需要在每次请求之间添加延迟,这样我就不会向服务器发送垃圾邮件:

async function multiReq(iterationNr){

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

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

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    一种选择是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,而不是相反,函数块} 不应该有结束后的分号。

    【讨论】:

    • 谢谢,这正是我一直在寻找的
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2012-09-24
      • 2020-08-14
      • 2014-10-10
      • 2016-11-13
      • 1970-01-01
      相关资源
      最近更新 更多