Javascript 获取循环中的数据

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 =

所以我尝试连接到外部服务器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 = 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);我可以在循环场景中使用它吗?在循环数组中创建有限制的承诺,然后使用
承诺。全部