ÐолÑÑиÑе даннÑе о полÑзоваÑелÑÑ GitHub
СоздайÑе аÑинÑ
ÑоннÑÑ ÑÑнкÑÐ¸Ñ getUsers(names), коÑоÑÐ°Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð½Ð° вÑ
од маÑÑив логинов полÑзоваÑелей GitHub, запÑаÑÐ¸Ð²Ð°ÐµÑ Ñ GitHub инÑоÑмаÑÐ¸Ñ Ð¾ ниÑ
и возвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив обÑекÑов-полÑзоваÑелей.
ÐнÑоÑмаÑÐ¸Ñ Ð¾ полÑзоваÑеле GitHub Ñ Ð»Ð¾Ð³Ð¸Ð½Ð¾Ð¼ USERNAME доÑÑÑпна по ÑÑÑлке: https://api.github.com/users/USERNAME.
РпеÑоÑниÑе еÑÑÑ ÑеÑÑовÑй пÑимеÑ.
ÐажнÑе деÑали:
- Ðа каждого полÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ пÑиÑ
одиÑÑÑÑ Ð¾Ð´Ð¸Ð½ запÑоÑ
fetch. - ÐапÑоÑÑ Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð´ÑÑг дÑÑга. Ðадо, ÑÑÐ¾Ð±Ñ Ð´Ð°Ð½Ð½Ñе пÑÐ¸Ñ Ð¾Ð´Ð¸Ð»Ð¸ как можно бÑÑÑÑее.
- ÐÑли какой-Ñо запÑÐ¾Ñ Ð·Ð°Ð²ÐµÑÑаеÑÑÑ Ð¾Ñибкой или оказалоÑÑ, ÑÑо даннÑÑ
о запÑаÑиваемом полÑзоваÑеле неÑ, Ñо ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° возвÑаÑаÑÑ
nullв маÑÑиве ÑезÑлÑÑаÑов.
ÐÑкÑÑÑÑ Ð¿ÐµÑоÑниÑÑ Ñ ÑеÑÑами Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñи.
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ полÑзоваÑеле, нам нÑжно вÑзваÑÑ fetch('https://api.github.com/users/USERNAME').
ÐÑли оÑÐ²ÐµÑ Ð¿ÑиÑ
Ð¾Ð´Ð¸Ñ cо ÑÑаÑÑÑом 200, Ñо вÑзÑваем меÑод .json(), ÑÑÐ¾Ð±Ñ Ð¿ÑоÑиÑаÑÑ JS-обÑекÑ.
РеÑли запÑÐ¾Ñ Ð·Ð°Ð²ÐµÑÑаеÑÑÑ Ð¾Ñибкой или код ÑÑаÑÑÑа в оÑвеÑе оÑлиÑен Ð¾Ñ 200, Ñо Ð¼Ñ Ð¿ÑоÑÑо возвÑаÑаем null в маÑÑиве ÑезÑлÑÑаÑов.
ÐÐ¾Ñ ÐºÐ¾Ð´:
async function getUsers(names) {
let jobs = [];
for(let name of names) {
let job = fetch(`https://api.github.com/users/${name}`).then(
successResponse => {
if (successResponse.status != 200) {
return null;
} else {
return successResponse.json();
}
},
failResponse => {
return null;
}
);
jobs.push(job);
}
let results = await Promise.all(jobs);
return results;
}
ÐожалÑйÑÑа, обÑаÑиÑе внимание: вÑзов .then пÑикÑеплÑн к fetch, ÑÑобÑ, когда оÑÐ²ÐµÑ Ð¿Ð¾Ð»ÑÑен, ÑÑÐ°Ð·Ñ Ð½Ð°ÑинаÑÑ ÑÑиÑÑвание даннÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ .json(), не дожидаÑÑÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð´ÑÑгиÑ
запÑоÑов.
ÐÑли Ð±Ñ Ð¼Ñ Ð¸ÑполÑзовали await Promise.all(names.map(name => fetch(...))) и вÑзÑвали Ð±Ñ .json() на ÑезÑлÑÑаÑаÑ
запÑоÑов, Ñо пÑиÑлоÑÑ Ð±Ñ Ð¶Ð´Ð°ÑÑ, пока завеÑÑаÑÑÑ Ð²Ñе из ниÑ
. ÐÑзÑÐ²Ð°Ñ .json() ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле каждого fetch, Ð¼Ñ Ð´Ð¾Ð±Ð¸Ð»Ð¸ÑÑ Ñого, ÑÑо ÑÑиÑÑвание пÑиÑланнÑÑ
по ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð·Ð°Ð¿ÑоÑÑ Ð´Ð°Ð½Ð½ÑÑ
пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ Ð´ÑÑгиÑ
запÑоÑов.
ÐÑо пÑÐ¸Ð¼ÐµÑ Ñого, как оÑноÑиÑелÑно низкоÑÑовневое Promise API Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм, даже еÑли Ð¼Ñ Ð² оÑновном иÑполÑзÑем async/await в коде.
ÐÑкÑÑÑÑ ÑеÑение Ñ ÑеÑÑами в пеÑоÑниÑе.