Await bilanida va'da xatosini (rad etishni) qanday boshqarish mumkin?
sobes.tech AI
AIdan javob
await bilanmasi bilan va'da bilan ishlashda, xatoliklar (rad etishlar) bir nechta usullar bilan boshqarilishi mumkin:
-
try...catchtuzilmasi: Eng keng tarqalgan va tavsiya etilgan usul. Bu, va'da (promise) yechilgan (resolve) yoki rad etilgan (reject) paytda xatoliklarni elegant tarzda ushlash imkonini beradi.async function fetchData() { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error(`HTTP xato! holat: ${response.status}`); } const data = await response.json(); console.log(data); } catch (error) { console.error('Ma`lumotlarni olishda xato:', error); // Qo`shimcha xato bilan ishlash yoki foydalanuvchiga bildirish } } fetchData(); -
awaitdan keyin.catch()usuli: Kamroq tavsiya etilgan, ammo mumkin. Xato, agar va'da rad etilgan bolsa,.catch()` callbackida boshqariladi.async function fetchData() { const response = await fetch('https://api.example.com/data') .catch(error => { console.error('Fetch qilishda xato:', error); // fetch xatosini boshqarish throw error; // Keyingi ishlov berish uchun xatoni qayta yuborish }); if (response && !response.ok) { console.error(`HTTP xato! holat: ${response.status}`); // HTTP xatosini boshqarish } if (response && response.ok) { const data = await response.json() .catch(error => { console.error('JSON ni tahlil qilishda xato:', error); // JSON tahlil qilish xatosini boshqarish }); if (data) { console.log(data); } } } fetchData();Bu yondashuv ko
p ehtimoliy xato nuqtalarini boshqarishda qiyinchilik tugdirishi mumkin. -
Xato bilan qiymatni qaytarish usuli: Ba
zi kutubxonalar yoki oz funksiyalaringiz, va'dani rad etish orniga,[malumotlar, xato]tuplagini qaytarishi mumkin.async function safelyFetchData() { const [data, error] = await safePromise(fetch('https://api.example.com/data')); if (error) { console.error('Umumiy xato:', error); return null; // yoki xatoni ko`rsatadigan boshqa qiymat } // safePromise response.ok xatolarini ham boshqaradi deb faraz qilamiz console.log(data); return data; } // safePromise ni misol uchun (soddalashtirilgan) async function safePromise(promise) { try { const result = await promise; // Bu yerda result.ok uchun tekshirish bo`lishi mumkin if (result && result.ok !== undefined && !result.ok) { throw new Error(`HTTP xato! holat: ${result.status}`); } // fetch uchun, ehtimol, result.json() ni await qilish kerak if (result && typeof result.json === 'function') { const jsonData = await result.json(); return [jsonData, null]; } return [result, null]; } catch (error) { return [null, error]; } } safelyFetchData();Bu usul (ko
pincha "error-first callback" yoki "go-style error handling" deb ataladi) xatolarni lokal tarzda boshqarish uchun qulay, funksiyaning bajarilishini toxtatmasdan.
Eng toza va oqilishi oson usul, try...catchniawait ni oz ichiga olgan kod blokiga qo`yishdir.