Javascript 等待所有请求调用返回后再继续

Javascript 等待所有请求调用返回后再继续,javascript,node.js,typescript,asynchronous,async-await,Javascript,Node.js,Typescript,Asynchronous,Async Await,我有一个程序,它运行以下操作: async function run() { for (i of object) { request("https://www." + i + ".mydomain.com") await wait(250) // synchronous, to prevent API spam } // HERE moveOn() } 在运行moveOn()之前,如何等待收到所有请求的响应?使用http请

我有一个程序,它运行以下操作:

async function run() {

  for (i of object) {
   request("https://www." + i + ".mydomain.com")
   await wait(250) // synchronous, to prevent API spam
  }

  // HERE
  moveOn()
}

在运行moveOn()之前,如何等待收到所有请求的响应?

使用http请求库,该库与诸如
get()之类的承诺一起工作:

这里还有几个其他相关的问题

  • request()
    库已经存在,不建议用于新代码
  • 有一个推荐的替代库列表,这些库都是基于承诺的
  • 该列表中我个人最喜欢的是,它支持
    request()
    库所做的大多数选项,但它将东西封装在更易于使用的基于承诺的API中(在我看来),并且很好地支持未来
  • 请求之间硬编码的250毫秒等待有点粗暴。最好了解目标主机的实际限制是什么,以及这些实际限制的代码是什么,这些限制可能是最大n个请求/秒,或者在飞行中不超过n个请求,或者类似的东西,并且有一些包可以帮助您实现代码来解决这些限制是的
  • 如果其中一个请求出现错误,您还需要有意识地决定计划是什么。此处显示的结构将中止
    run()
    函数,因为任何一个请求都有错误。如果要以不同的方式执行操作,则需要使用
    try/catch
    wait got()
    捕获错误,然后在
    catch
    块中处理错误
  • 您可以使用
    axios()
    got()
    等。 请像这样尝试:

    async function run() {
      let count = 0;
    
      for (i of object) {
       axios("https://www." + i + ".mydomain.com")
        .then(res => {
         count++;
         // Your code    
        })
        .catch(err => {
         count++;
        });
    
       await wait(250) // synchronous, to prevent API spam
      }
    
      // HERE
      setInterval(() => {
       if (count === object.length) {
        count = 0;
        moveOn()
       }
      }, 250);
    }
    

    看,我不想“等待”实际的请求,因为我想让每个请求发出的间隔几乎正好是250毫秒,而不是250毫秒,不管请求发出的时间有多长resolve@TomG-嗯,你的问题在那一点上不是很清楚。我编辑了我的答案,以启动相隔250毫秒的请求,但允许它们同时运行,然后等待所有结果,然后再调用
    moveOn()
    async function run() {
      let count = 0;
    
      for (i of object) {
       axios("https://www." + i + ".mydomain.com")
        .then(res => {
         count++;
         // Your code    
        })
        .catch(err => {
         count++;
        });
    
       await wait(250) // synchronous, to prevent API spam
      }
    
      // HERE
      setInterval(() => {
       if (count === object.length) {
        count = 0;
        moveOn()
       }
      }, 250);
    }