javascript - Node.js如何在循环中发出http get请求
问题描述
我正在向某个端点发出 http get 请求,比如说 /bla-bla/{country}?page={page_number},它会返回包含一些内容的 json,包括字段 total_pages。所以我正在循环国家,对于第一个查询页面值为1的每个国家,它是我读取该国家的total_pages的返回响应,然后我需要使用page++重复请求,直到它达到total_pages,然后是下一个国家和它的相同操作. 所以我是 js 的菜鸟,我看到大多数处理 http 的库会根据请求返回承诺,或者使用回调,我不明白如何使用承诺链或回调函数来实现我的目标。请给一些建议......
解决方案
您需要映射您的请求: 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,然后你就会得到一个结果数组。让我知道这是否有帮助。
推荐阅读
- json - 使用 React 功能组件中的 setState 更新空对象 {}
- javascript - 状态没有正确更新
- javascript - JS 问题:如何让我的 0 级在我的聊天提示中流到 1 级
- flutter - Flutter错误无法将元素类型'List'分配给列表类型'Widget'
- python - 如何从嵌套列表中删除子列表?
- java - 如何使用 MutliResoucrItemReader 为步骤设置动态块大小?
- swift - NSPredicate 优先返回值
- python - 为什么我在保存图像时会丢失通道以及如何避免它?
- java - 为什么总是多打印一行“年利率”,这个问题怎么解决?
- database - DynamoDB Schema 设计与复合键