3

In React, I want to pass a function getRepos() to componentDidMount(). getRepos() waits for another function which passes data from API call. I want to be able to put all promises in one array and then resolve it. How do I do that? Here's what I've got so far:

async getRepos() {
    const tmpRepos = [];
    const numPages = await this.getOrgPages();
    for (let page = 1; page <= numPages; page += 1) {
      axios.get(`https://api.github.com/orgs/angular/repos?page=${page}&per_page=100&${API_KEY}`)
    }
    axios.all(tmpRepos).then(res => console.log(res));
}

But just logs an empty array

5
  • You'd done everything except push to tmpRpos. Commented Sep 24, 2017 at 15:17
  • Side note: What if the number of pages changes while you're doing this? Perhaps better to just query starting from 1 until you get an error? Commented Sep 24, 2017 at 15:18
  • I get the number of pages in response to the API call in getOrgPages() function Commented Sep 24, 2017 at 15:20
  • Hence the "...while you're doing this..." part of the comment. Think race condition. Commented Sep 24, 2017 at 15:32
  • 2
    Good question. I will need to think about it Commented Sep 24, 2017 at 17:02

1 Answer 1

5

Create a new array, and fill it by results of axios.get calls, use this array in axios.all:

async getRepos() {
    const ops = [];
    const numPages = await this.getOrgPages();
    for (let page = 1; page <= numPages; page += 1) {
      let op = axios.get(`https://api.github.com/orgs/angular/repos?page=${page}&per_page=100&${API_KEY}`);
      ops.push(op);
    }

    let res = await axios.all(ops);
    console.log(res);
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.