darsga qaytish

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:

  1. Har bir foydalanuvchi uchun bitta fetch soʻrovi boʻlishi kerak.
  2. So’rovlar bir-birini kutmasligi kerak. Shunday qilib, ma’lumotlar imkon qadar tezroq keladi.
  3. Agar biron-bir so’rov bajarilmasa yoki bunday foydalanuvchi bo’lmasa, funktsiya olingan massivda null qiymatini qaytarishi kerak.

Sinovlar bilan sandbox-ni oching.

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.

Yechimni sandbox-dagi sinovlar bilan oching.