Await istifadə edərkən vədin (reject) səhvini necə işləyə bilərsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
await ilə promiss istifadə edərkən, səhvlər (reject) bir neçə yolla idarə oluna bilər:
-
try...catchquruluşu: Ən çox yayılmış və tövsiyə olunan üsul. Bu, promissin həll olunması (resolve) və ya rədd olunması (reject) zamanı atılan səhvi şık şəkildə tutmağa imkan verir.async function fetchData() { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); console.log(data); } catch (error) { console.error('Məlumatların alınmasında xəta:', error); // Əlavə xəta emalı və ya istifadəçiyə bildiriş } } fetchData(); -
.catch()metoduawaitsonrası: Daha az üstünlük verilən, amma mümkün variantdır. Əgər promiss rədd olunarsa,.catch()içindəki callback-də xəta idarə olunacaq.async function fetchData() { const response = await fetch('https://api.example.com/data') .catch(error => { console.error('Fetch icrasında xəta:', error); // Fetch xəta emalı throw error; // Daha sonra emal üçün xətanı ötürürük }); if (response && !response.ok) { console.error(`HTTP error! status: ${response.status}`); // HTTP xəta emalı } if (response && response.ok) { const data = await response.json() .catch(error => { console.error('JSON parse xəta:', error); // JSON parse xəta emalı }); if (data) { console.log(data); } } } fetchData();Bu yanaşma çoxsaylı potensial uğursuzluq nöqtələrində mürəkkəb ola bilər.
-
Xəta ilə birlikdə dəyər qaytarmaq: Bəzi kitabxanalar və ya öz funksiyalar
[məlumat, xəta]cütlüyü qaytarır, promissin rədd olunması yerinə.async function safelyFetchData() { const [data, error] = await safePromise(fetch('https://api.example.com/data')); if (error) { console.error('Ümumi məlumat alma xəta:', error); return null; // və ya başqa bir uğursuzluğu göstərən dəyər } // safePromise response.ok-u da emal edir console.log(data); return data; } // safePromise-nin sadə implementasiyası nümunəsi async function safePromise(promise) { try { const result = await promise; // burada result.ok yoxlaması ola bilər, məsələn fetch üçün if (result && result.ok !== undefined && !result.ok) { throw new Error(`HTTP error! status: ${result.status}`); } // fetch üçün, ehtiyac olarsa, await result.json() if (result && typeof result.json === 'function') { const jsonData = await result.json(); return [jsonData, null]; } return [result, null]; } catch (error) { return [null, error]; } } safelyFetchData();Bu nümunə (tez-tez "error-first callback" və ya "go-style error handling" adlanır) funksiyanın icrasını pozmadan xətaları lokal şəkildə emal etmək üçün əlverişlidir.
Ən təmiz və oxunaqlı üsul isə try...catch blokunu await olan kod bloku ətrafında istifadə etməkdir.