JavaScript callback funksiyalar

JavaScript’da funksiya ham qiymat: uni o’zgaruvchiga berish, massivga solish va boshqa funksiyaga uzatish mumkin. Oxirgisi — callback, va u asinxron kodning poydevori.

Funksiya — qiymat

JavaScript

Qavssiz salom — funksiyaning o’zi; qavs bilan salom() — uni chaqirish natijasi. Bu farq callback’da hal qiluvchi.

Callback uzatish

JavaScript

bajar funksiyasi o’ziga berilgan funksiyani o’zi chaqiradi. Bu qachon va necha marta chaqirishni tashqaridagi funksiya hal qilishini anglatadi.

Callback bilan moslashuvchan funksiya

Callback bir funksiyani turli vazifalarga moslaydi:

JavaScript

Bitta qayta funksiyasi — uch xil natija. Aynan shu tamoyil ustiga massiv metodlari qurilgan.

Asinxron callback — setTimeout

Shu paytgacha kod yuqoridan pastga ketma-ket bajarildi. setTimeout esa callback’ni keyinroq chaqiradi:

JavaScript

Tartibga e’tibor bering: 2 3 dan oldin chiqdi. setTimeout kodni to’xtatmaydi — u callback’ni navbatga qo’yadi va keyingi qatorga o’tadi.

Natijani callback orqali qaytarish

Asinxron funksiya natijani return bilan qaytara olmaydi:

JavaScript

undefined chiqdi — malumotOl setTimeout ni ishga tushirib, javob kelishini kutmasdan tugadi. Yechim: natijani callback’ga uzatish:

JavaScript

Xatoni ham uzatish

An’anaviy yondashuv — callback’ning birinchi argumenti xato:

JavaScript

Callback hell

Bir necha asinxron amal ketma-ket kerak bo’lsa, callback’lar ichma-ich joylashadi:

malumotOl((foydalanuvchi) => {
  buyurtmalarOl(foydalanuvchi, (buyurtmalar) => {
    tafsilotOl(buyurtmalar[0], (tafsilot) => {
      console.log(tafsilot);
    });
  });
});

Har qadamda chuqurlik oshadi, xato ushlash qiyinlashadi. Bu naqsh callback hell (yoki “halokat piramidasi”) deb ataladi.

Aynan shu muammoni hal qilish uchun Promise yaratilgan — keyingi darsning mavzusi.

Amaliy mashq

  1. Funksiyani o’zgaruvchiga bering va o’zgaruvchi orqali chaqiring;
  2. massivdagi har elementga callback qo’llaydigan funksiya yozing;
  3. setTimeout bilan 2 soniyadan keyin xabar chiqaring;
  4. callback’ga natija uzatadigan asinxron funksiya yozing;
  5. (xato, natija) naqshi bilan yoshni tekshiruvchi funksiya tuzing;
  6. setTimeout ni 0 ms bilan yozib, u baribir oxirida chiqishini ko’ring.

6-qadam JavaScript’ning navbat tizimini ko’rsatadi.

Qisqacha xulosa

  • Funksiya — qiymat: uzatish, saqlash va qaytarish mumkin.
  • Callback — boshqa funksiyaga uzatiladigan va u chaqiradigan funksiya.
  • Qavssiz f — funksiyaning o’zi, f() — chaqiruv natijasi.
  • setTimeout callback’ni navbatga qo’yadi, kodni to’xtatmaydi.
  • Asinxron natija return bilan emas, callback orqali qaytariladi.
  • Ichma-ich callback’lar callback hell ga olib keladi.

Keyingi darsda Promise — shu muammoning yechimi.

Bu dars foydali bo'ldimi?

marta ko'rildi