Await kullanırken bir promise'in hatasını (reject) nasıl işleyebilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
await ile bir söz verme (promise) kullanırken, hatalar (reddetmeler) birkaç şekilde işlenebilir:
-
try...catchyapısı: En yaygın ve önerilen yöntemdir. Söz verme (promise) çözülürken (resolve) veya reddedilirken (reject) atılan hataları zarifçe yakalamayı sağlar.async function fetchData() { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error(`HTTP hata! durum: ${response.status}`); } const data = await response.json(); console.log(data); } catch (error) { console.error('Veri alınırken hata:', error); // Ek hata işleme veya kullanıcıya bildirim } } fetchData(); -
awaitsonrası.catch()yöntemi: Daha az tercih edilen, ancak mümkün. Hata, söz verme reddedildiğinde.catch()geri çağırma fonksiyonunda işlenir.async function fetchData() { const response = await fetch('https://api.example.com/data') .catch(error => { console.error('Fetch sırasında hata:', error); // fetch hatasını işleme throw error; // Daha fazla işlem için hatayı yeniden fırlat }); if (response && !response.ok) { console.error(`HTTP hata! durum: ${response.status}`); // HTTP hatası işleme } if (response && response.ok) { const data = await response.json() .catch(error => { console.error('JSON ayrıştırma hatası:', error); // JSON ayrıştırma hatasını işleme }); if (data) { console.log(data); } } } fetchData();Bu yaklaşım, olası hata noktalarının çokluğu nedeniyle karmaşık hale gelebilir.
-
Hata ile dönüş değeri kullanımı: Bazı kütüphaneler veya kendi fonksiyonlarınız, söz verme reddetmek yerine
[veriler, hata]şeklinde bir ikili dönebilir.async function safelyFetchData() { const [data, error] = await safePromise(fetch('https://api.example.com/data')); if (error) { console.error('Genel hata:', error); return null; // veya hata olduğunu belirten başka bir değer } // safePromise'un response.ok hatalarını da işlediği varsayılır console.log(data); return data; } // safePromise örneği (basitleştirilmiş) async function safePromise(promise) { try { const result = await promise; // Burada result.ok kontrolü yapılabilir if (result && result.ok !== undefined && !result.ok) { throw new Error(`HTTP hata! durum: ${result.status}`); } // fetch için, result.json() await edilmesi gerekebilir if (result && typeof result.json === 'function') { const jsonData = await result.json(); return [jsonData, null]; } return [result, null]; } catch (error) { return [null, error]; } } safelyFetchData();Bu desen (sıkça "error-first callback" veya "Go tarzı hata yönetimi" olarak adlandırılır), hataları yerel olarak işlemek ve fonksiyonun yürütülmesini kesintiye uğratmamak istediğinizde kullanışlıdır.
En temiz ve okunabilir yöntem, try...catch kullanmak ve await içeren kod bloğunu çevrelemektir.