Skip to content

JavaScript Fetch API

Fetch API haqida

fetch() — serverdan ma'lumot so'rashning zamonaviy usuli.

  • fetch() asinxron ishlaydi va promise (va'da) qaytaradi.
  • Zamonaviy ilovalar ma'lumot olish uchun asinxron koddan foydalanadi.
  • fetch() bunga eng keng tarqalgan misoldir.

fetch Promise qaytaradi

fetch() funksiyasi ma'lumotning o'zini qaytarmaydi. U keyinchalik javobga (response) aylanadigan promise qaytaradi.

Misol

js
fetch('data.json').then(function (response) {
  console.log(response)
})

Natijada JSON ma'lumotlari emas, balki Response obyekti hosil bo'ladi.


JSON ma'lumotlarini olish

JSON ma'lumotlarini olish uchun javob tanasini (body) o'qishingiz kerak. response.json() ham promise qaytaradi.

Misol

js
fetch('data.json')
  .then(function (response) {
    return response.json()
  })
  .then(function (data) {
    console.log(data)
  })

Eslatma

Yuqoridagi kod promise-lar zanjiri (chain) hisoblanadi.


fetch bilan async va await

async va await kalit so'zlari fetch kodini o'qishni osonlashtiradi. Bu yangi boshlovchilar uchun tavsiya etilgan usuldir.

Misol

js
async function loadData() {
  let response = await fetch('data.json')
  let data = await response.json()
  console.log(data)
}

loadData()

Muhim: HTTP xatolari

Yangi boshlovchilar tez-tez 404 yoki 500 xatolarida fetch ishlamay qoladi (fail bo'ladi) deb o'ylashadi. Aslida fetch faqat tarmoq xatolari (network errors) bo'lgandagina rad etiladi (reject).

Diqqat!

404 javobi rad etilgan promise emas. Siz har doim response.ok xususiyatini tekshirishingiz kerak.

Misol

js
async function loadData() {
  let response = await fetch('missing.json')

  if (!response.ok) {
    console.log('HTTP xatosi:', response.status)
    return
  }

  let data = await response.json()
  console.log(data)
}

loadData()

Tarmoq xatolari (Network Errors)

Tarmoq xatosi so'rovni bajarib bo'lmaganda (masalan, internet uzilganda yoki DNS xatosi bo'lganda) yuz beradi. Tarmoq xatolari promiseni rad etadi.

Misol

js
async function loadData() {
  try {
    let response = await fetch('data.json')
    let data = await response.json()
    console.log(data)
  } catch (error) {
    console.log('Tarmoq xatosi yuz berdi')
  }
}

fetch-da keng tarqalgan xatolar

Ehtiyot bo'ling!

await so'zini unutib qoldirish sizga ma'lumot o'rniga promiseni qaytaradi.

Misol (xato usul)

js
async function loadData() {
  let response = await fetch('data.json')
  let data = response.json() // await tushirib qoldirildi
  console.log(data) // Bu yerda promise chiqadi
}

Callback va Fetch farqi

Eski XMLHttpRequest bilan callback-lardan foydalanish ancha murakkab va uzun kod talab qiladi. fetch() esa promislar va async/await yordamida kodni sodda va tushunarli qiladi.

CallbackPromise / async-await
Keyinroq bajariladigan funksiyani uzatasizPromisni kutasiz (await)
Xatolar qo'lda boshqariladiO'rnatilgan xatolar tizimi
Kod ichma-ich bo'lib ketishi mumkinNormal kod kabi o'qiladi
Bosqichlarni bog'lash qiyinBosqichlarni bog'lash oson