Sobes.tech
Junior

Qachon va'da xatolik bilan yakunlanganida (rad etish) qanday boshqarasiz?

sobes.tech AI

AIdan javob

Men operatsiyalarni .catch() yoki .finally() metodlari bilan boshqaraman.

.catch() rad etilgan va'dalarni boshqarish uchun ishlatiladi. Agar va'da muvaffaqiyatli bajarilsa, .catch() bloki e'tiborga olinmaydi.

// Xatolikni `.catch()` bilan boshqarish
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed'); // Xatolikni simulyatsiya qilish
    }
    return response.json();
  })
  .then(data => {
    console.log('Qabul qilingan maʼlumotlar:', data);
  })
  .catch(error => {
    console.error('Xato:', error); // Xatolikni bu yerda boshqarish
  });

.finally() va'da muvaffaqiyatli (fulfill) yoki xato bilan (reject) tugashidan qat'i nazar, har doim bajariladi. Bu resurslarni tozalash yoki yuklash indikatorlarini yashirish uchun foydalidir.

// `.finally()` dan foydalanish, va'da tugagach, kodni bajarish uchun
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed');
    }
    return response.json();
  })
  .then(data => {
    console.log('Qabul qilingan maʼlumotlar:', data);
  })
  .catch(error => {
    console.error('Xato:', error);
  })
  .finally(() => {
    console.log('So'rov tugadi.'); // Bu kod har doim bajariladi
  });

Shuningdek, async funksiyalar ichida try...catch konstruktsiyasidan foydalanib, va'dalar va boshqa asinxron operatsiyalar xatolarini boshqarish mumkin:

// `async/await` bilan xatolarni boshqarish, try...catch yordamida
async function fetchData() {
  try {
    const response = await fetch('/api/data');
    if (!response.ok) {
      throw new Error('Request failed');
    }
    const data = await response.json();
    console.log('Qabul qilingan maʼlumotlar:', data);
  } catch (error) {
    console.error('Xato:', error); // Xatoni bu yerda boshqarish
  } finally {
    console.log('Fetch operatsiyasi tugadi.'); // Har doim bajariladi
  }
}

fetchData();

Metod tanlovi kontekst va talab qilingan xato boshqarish mantiqiga bog'liq. .catch() xatolarni reaktsiya qilish uchun asosiy konstruktsiya bo'lib, .finally() har doim bajariladigan harakatlar uchun, try...catch esa, async funksiyalarida, yanada odatiy va sinxron tarzda xatolarni boshqarish imkonini beradi.