StáhnÄte uživatele z GitHubu
VytvoÅte asynchronnà funkci vraÅ¥Uživatele(jména), která obdržà pole uživatelských jmen na GitHubu, stáhne z GitHubu pÅÃsluÅ¡né uživatele a vrátà je jako pole.
URL GitHubu s informacemi o uživateli s uživatelským jménem USERNAME je: https://api.github.com/users/USERNAME.
V pÃskoviÅ¡ti najdete testovacà pÅÃklad.
Důležité detaily:
- Pro každého uživatele by se mÄl volat jeden požadavek
fetch. - Požadavky by na sebe nemÄly navzájem Äekat. Data tedy dorazà tak rychle, jak je to možné.
- Jestliže nÄkterý požadavek selže nebo zadaný uživatel neexistuje, funkce by ve výsledném poli mÄla vrátit
null.
Pro staženà uživatele potÅebujeme: fetch('https://api.github.com/users/USERNAME').
Jestliže odpovÄÄ má status 200, zavoláme .json(), abychom naÄetli JS objekt.
V opaÄném pÅÃpadÄ, jestliže fetch selže nebo odpovÄÄ má jiný status než 200, jen vrátÃme ve výsledném poli null.
Zde je tedy kód:
async function vraťUživatele(jména) {
let uživatelé = [];
for(let jméno of jména) {
let uživatel = fetch(`https://api.github.com/users/${jméno}`).then(
úspÄÅ¡náOdpovÄÄ => {
if (úspÄÅ¡náOdpovÄÄ.status != 200) {
return null;
} else {
return úspÄÅ¡náOdpovÄÄ.json();
}
},
neúspÄÅ¡náOdpovÄÄ => {
return null;
}
);
uživatelé.push(uživatel);
}
let výsledky = await Promise.all(uživatelé);
return výsledky;
}
ProsÃme vÅ¡imnÄte si, že volánà .then je pÅipojeno pÅÃmo k fetch. Když tedy máme odpovÄÄ, neÄeká na ostatnà stahovánÃ, ale zaÄne okamžitÄ naÄÃtat .json().
Kdybychom použili await Promise.all(jména.map(jméno => fetch(...))) a volali .json() na výsledcÃch, napÅed by se Äekalo na odpovÄdi vÅ¡ech stahovánÃ. PÅidánÃm .json() pÅÃmo ke každému fetch zajistÃme, že jednotlivá stahovánà zaÄnou naÄÃtat data jako JSON bez Äekánà na ostatnà stahovánÃ.
Je to pÅÃklad toho, jak může být pÅÃslibové API nižšà úrovnÄ stále užiteÄné, i když pÅevážnÄ použÃváme async/await.