[英]How can I get one response for different API pages
我正在尝试从具有不同页面 URL 的 API 获得一个响应,我怎样才能在一个 API 调用中实现这一点。
这是我的代码
async function arrayFetcher (){
// Get `urlArray` from object param
let urlArray = [];
let url = ""
for(let i = 1; i < 20; i++) {
url = `https://api.google.com/page=250&page=${i}&sparkline=false`
}
const resp = await axios.get(url)
const response = await urlArray?.Promise?.all(resp).then(res => res.json());
console.log(response)
};
你可以使用Promise.all
。 制作一个数组(比如说urls
)然后 -
const results = await Promise.all(urls.map(async url => {
const resp = await axios.get(url);
return resp.json();
}));
更新:您还需要将 url 推送到urlArray
for(let i = 1; i < 20; i++) {
url = `https://api.google.com/page=250&page=${i}&sparkline=false`;
urlArray.push(url);
}
然后在Promise.all
中使用它。
你可以用 Promise.all 做到这一点,一个例子可能是:
const fetchData = async () => {
const url1 = 'https://jsonplaceholder.typicode.com/todos/1'
const url2 = 'https://jsonplaceholder.typicode.com/todos/2'
const url3 = 'https://jsonplaceholder.typicode.com/todos/3'
const result = await Promise.all([fetch(url1), fetch(url2), fetch(url3)])
const dataArr = result.map(result => result.json())
const allData = Promise.all(dataArr)
return allData
}
fetchData().then(res => console.log(res))
这不会导致一次 API 调用,而是网络将看到每个 URL 一次调用,该调用由axios.get(url)
调用。 要进行一次 API 调用并获取相同的数据,需要端点或新端点上的附加参数; 这是 API 所有者的服务器端更改。
Axios 不需要response.json()
因为它已经为你做了。 浏览器原生Fetch API确实需要它, fetch(url).then(res => res.json()).then(data => console.log(data))
。
async function arrayFetcher() { // generate 5 urls to fetch // API starts at 1 but index at 0, so `index+1` for valid URI const urls = [...Array(5).keys()].map((item, index) => `https://jsonplaceholder.typicode.com/todos/${index+1}`); // make API calls const results = await Promise.all(urls.map(async url => await axios.get(url))); // display each result // Axios places the value in `data` property results.forEach(result => console.log(result.data)); } arrayFetcher();
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.27.2/axios.min.js"></script>
您可能会改进此代码以将数组生成与 fetcher 函数分开,并将数组作为参数传递。 例子:
async function arrayFetcher(urls) { /*...*/ }
function generateUrlArray(baseUrl, amount) {
return [...Array(amount).keys()].map((item, index) => `${baseUrl}${index+1}`);
}
const urls = generateUrlArray('https://example.com/', 5); // generate array
arrayFetcher(urls);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.