首页 > 解决方案 > Node.js如何在循环中发出http get请求

问题描述

我正在向某个端点发出 http get 请求,比如说 /bla-bla/{country}?page={page_number},它会返回包含一些内容的 json,包括字段 total_pages。所以我正在循环国家,对于第一个查询页面值为1的每个国家,它是我读取该国家的total_pages的返回响应,然后我需要使用page++重复请求,直到它达到total_pages,然后是下一个国家和它的相同操作. 所以我是 js 的菜鸟,我看到大多数处理 http 的库会根据请求返回承诺,或者使用回调,我不明白如何使用承诺链或回调函数来实现我的目标。请给一些建议......

标签: javascriptnode.js

解决方案


您需要映射您的请求: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map 然后用 Promise.all https://developer.mozilla等待它们.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

const requests = countries.map(country => {
  return fetch(`www.some-api.com/${country}/page=1`)
}

const responses = await Promise.all(requests)

然后,如果您想使用从这些请求返回的信息,您基本上可以再次做同样的事情(但减少)。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

const countryPageRequests = responses.reduce((acc, curr) => {
  // I am assuming data structure here

  const pages = []
  for (i = 1, i <= response.maxPages, i++) {
    pages.push(fetch(`www.some-api.com/${request.country}/page=${i}`))
  }

  return [...acc, ...pages];
}, [])

const countryPageResults = Promise.all(countryPageRequests);

Promise.all 同时运行所有的 Promise,然后你就会得到一个结果数组。让我知道这是否有帮助。


推荐阅读