More into the details:
the task was "to fetch GitHub users using GitHub API"(which s easy, but here is caveat:) each user must have a repoCount field (where total count of his owned repos should display):
The GitHub api ave the endpoint which brings you GitHub users, but each user has only "repos_url" field - a link to fetching repos
const token = 'your-github-access-token-here';
function getUsers(since=0) {
const gitUri =`https://api.github.com`;
const usersUri = `${gitUri}/users?per_page=10&since=${since}&access_token=${token}`;
fetch(usersUri)
.then(d => d.json())
.then(data => {
// must get only those relevant two fields
const modified_users = data.map(({login, repos_url}) => ({login, repos_url}));
console.log(modified_users[0]);
});
}
getUsers(0);
Outcome:
To bring the repos-count you will need to make one more request for each user to fill the missing data:
function getReposCount(repos_url) {
// lets set "per_page" param to 10000
// assuming no one can have so much repos
// this way we will get the count using "length" property
const reposUri = `${repos_url}?per_page=10000&access_token=${token}`;
return fetch(reposUri)
.then(d => d.json())
.then(repos => {
return repos.length || 0;
})
}
Now we must change our "getUsers" so it will loop through all users and modify each user`s data properly:
fetch(usersUri)
.then(d => d.json())
.then(data => {
// loop through collection of users
let promises = data.map(({login, repos_url}) => getReposCount(repos_url)
.then(count => ({login, count})));
Promise.all(promises).then((users) => {
// lets display the data of ninth user
console.log(users[9]);
})
});
Now you can see the output:
The "count" field is added to user object!
No comments:
Post a Comment