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
fetch
soʻ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
null
qiymatini 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 null
ni 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: .then
ni 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 qong
iroq 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.