Foydalanuvchilarni GITHUBdan olish
GitHub loginlari qatorini oladigan, foydalanuvchilarni GitHubâdan oladigan va GitHub foydalanuvchilari qatorini qaytaradigan getUsers(names) asinxron funksiyasini yarating.
Berilgan USERNAME uchun foydalanuvchi maâlumotlariga ega GitHub url: https://api.github.com/users/USERNAME.
Sandboxda sinov namunasi mavjud.
Muhim tafsilotlar:
- Har bir foydalanuvchi uchun bitta
fetchsoÊ»rovi boÊ»lishi kerak. - Soârovlar bir-birini kutmasligi kerak. Shunday qilib, maâlumotlar imkon qadar tezroq keladi.
- Agar biron-bir soârov bajarilmasa yoki bunday foydalanuvchi boâlmasa, funktsiya olingan massivda
nullqiymatini qaytarishi kerak.
Bizga kerak foydalanuvchilarni olishimiz uchun: fetch('https://api.github.com/users/USERNAME').
Agar javob 200 holatiga ega boâlsa, JS obyektini oâqish uchun .json() ga qoângâiroq qiling.
Aks holda, agar fetch bajarilmasa yoki javob 200 boâlmagan maqomga ega boâlsa, hosil boâlgan massivda shunchaki nullni qaytaramiz.
Kod quyidagicha:
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;
}
Iltimos, diqqat qiling: .thenni chaqirish toâgâridan-toâgâri fetch ga biriktiriladi, shuning uchun biz javob olganimizda, u boshqa chaqiruvlarni kutmasdan, darhol .json() ni oâqiy boshlaydi.
Agar biz natijalarda await Promise.all(names.map(name => fetch(...))) dan foydalansak va .json() ga qongiroq qilsak, u barcha chaqiruvlar javob berishini kutadi. Har bir âolishâ ga toÊ»gÊ»ridan-toÊ»gÊ»ri .json() qoÊ»shish orqali biz individual yuklashlar bir-birini kutmasdan maʼlumotlarni JSON sifatida oÊ»qiy boshlashini taʼminlaymiz.
Bu past darajadagi Promise API qanchalik foydali boâlishining misoli, hatto biz asosan async/await dan foydalansak ham.