Javascript 获取循环中的数据
所以我尝试连接到外部服务器Pexels来获取一些照片。我是在node.js中这样做的,但这只是一个javascript问题。不幸的是,Pexels允许用户下载每页只有40张图片的对象Javascript 获取循环中的数据,javascript,node.js,reactjs,Javascript,Node.js,Reactjs,所以我尝试连接到外部服务器Pexels来获取一些照片。我是在node.js中这样做的,但这只是一个javascript问题。不幸的是,Pexels允许用户下载每页只有40张图片的对象 https://api.pexels.com/v1/curated?per_page=40&page=1 // 40 is maximum 但实际上我还需要更多。我想得到160个结果,即合并所有前四页。为此,我尝试循环请求: let pexelsData = []; for(let i =
https://api.pexels.com/v1/curated?per_page=40&page=1 // 40 is maximum
但实际上我还需要更多。我想得到160个结果,即合并所有前四页。为此,我尝试循环请求:
let pexelsData = [];
for(let i = 1; i < 5; i++) {
const randomPage = getRandomFromRange(1, 100); //pages should be randomized
const moreData = await axios.get(`https://api.pexels.com/v1/curated?per_page=40&page=${randomPage}`,
createHeaders('bearer ', keys.pexelsKey));
pexelsData = [ ...moreData.data.photos, ...pexelsData ];
}
让pexelsData=[];
for(设i=1;i<5;i++){
const randomPage=getRandomFromRange(1100);//应随机化页面
const moreData=等待axios.get(`https://api.pexels.com/v1/curated?per_page=40&page=${randomPage}`,
createHeaders('bearer',keys.pexelsKey));
pexelsData=[…moreData.data.photos,…pexelsData];
}
现在我可以使用pexelsData,但它的工作非常不稳定,有时它能够获取所有组合数据,有时它崩溃。是否有一种正确且稳定的请求循环方式?您可以将其分解为以下函数:
let images=[];
const getResponse = async i=> {
if(i<5)
return await axios.get(`https://api.pexels.com/v1/curated?per_page=40&page=${i}`)
}
const getImage = (i)=>{
if(i<5){
try {
const request = getResponse(i);
images = [...images,...request];
// here you will get all the images in an array
console.log(images)
getImage(++i)
} catch (error) {
console.log("catch error",error)
// getImage(i)
}
}
}
getImage(0); //call initail
let image=[];
const getResponse=async i=>{
如果(i){
如果(i您使用具有速率限制的第三方API,那么您应该在代码中添加速率限制。最简单的解决方案是使用p-limit
或类似的方法表单
看起来是这样的:
const pLimit = require('p-limit');
const limit = pLimit(1);
const input = [
limit(() => fetchSomething('foo')),
limit(() => fetchSomething('bar')),
limit(() => doSomething())
];
(async () => {
// Only one promise is run at once
const result = await Promise.all(input);
console.log(result);
})();
它不会因为代码而崩溃,也没有JavaScript/节点魔法可以让它不会崩溃——您可能已经超过了API的限制。那么我是不是无法以稳定的方式加载它?我猜它不会工作,因为您无法执行const request=getResponse(I),因为getResponse(I)将提供一个承诺。您也可以为此函数使用async await。.const request=await getResponse(i);我可以在循环场景中使用它吗?在循环数组中创建有限制的承诺,然后使用承诺。全部