Promise
Söz
- Okunuşu
- promis
Kısaca
Promise, asenkron bir işlemin nihai sonucunu temsil eden bir nesnedir; iş bittiğinde kodun başarıya ya da hataya tepki vermesini sağlar.
Promise nedir?
Promise, bir ağ isteğinin yanıtı gibi henüz elde olmayan bir değerin yer tutucusudur. Beklerken programı bloke etmek yerine asenkron bir fonksiyon hemen bir promise döndürür. Kodunuz da sonuç geldiğinde ya da bir şeyler ters gittiğinde çalışacak işleyiciler ekler.
Bir promise her zaman üç durumdan birindedir: pending (hâlâ bekliyor), fulfilled (bir değerle başarıyla tamamlandı) ya da rejected (bir hatayla başarısız oldu). Fulfilled ya da rejected olduğunda settled (sonuçlanmış) denir ve durumu bir daha asla değişmez. Sonuca, başarı için .then(), hatalar için .catch() ve temizlik için .finally() ile tepki verirsiniz.
Bir restoranda sipariş verdiğinizde size verilen çağrı cihazı promise için iyi bir benzetmedir. Yemeğiniz değildir, ama siparişiniz hazır olduğunda ya da bir sorun çıktığında haber alacağınızı garanti eder. Promise'lar JavaScript'e yerleşiktir ve fetch gibi modern API'ler tarafından döndürülür; diğer dillerde future veya task adı verilen benzer kavramlar bulunur.
Promise'lar, asenkron JavaScript yazmada derin iç içe callback'lerin yerini alarak standart yol hâline geldi. async/await sözdizimi promise'ların üzerine kuruludur: async bir fonksiyon her zaman bir promise döndürür ve await, bir promise sonuçlanana dek o fonksiyonu duraklatır.
Önemli noktalar
- Promise, gelecekte elde edilecek bir değeri temsil eder.
- Önce pending durumda başlar, sonra bir değerle fulfilled ya da bir hatayla rejected olur.
- Sonucu yönetmek için
.then(),.catch()ve.finally()kullanılır. Promise.allgibi yardımcılar, paralel çalışan birkaç asenkron işlemi bekler.- async/await, promise'ların üzerine kurulu daha okunaklı bir sözdizimidir.
Örnek
// fetch returns a promise that resolves to a response
fetch("https://api.example.com/users/42")
.then((response) => response.json()) // runs on success
.then((user) => console.log(user.name))
.catch((error) => console.error("Request failed:", error))
.finally(() => console.log("Done"));
// Creating your own promise that resolves after a delay
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
wait(500).then(() => console.log("Half a second later"));Sık sorulan sorular
Bir promise'ın üç durumu nedir?
Bir promise, işlem sürerken pending, işlem bir değerle başarıyla bittiğinde fulfilled, bir hatayla başarısız olduğunda ise rejected durumundadır. Fulfilled ya da rejected olduğunda settled olur ve artık değişemez.
Promise ile async/await arasındaki fark nedir?
Bunlar birbirinin alternatifi değildir: async/await, promise'ların üzerine kurulu bir sözdizimidir. Promise tabanlı kodu normal, adım adım okunan kod gibi yazmanızı sağlar; hatalar için .catch() yerine try/catch kullanılır.
Promise.all ile Promise.allSettled arasındaki fark nedir?
Promise.all, tüm promise'ların başarılı olmasını bekler ve bunlardan herhangi biri başarısız olur olmaz reddedilir. Promise.allSettled ise hepsinin bitmesini bekler ve başarılı ya da başarısız her sonucu raporlar.
Sık karşılaştırılanlar
İlgili sayfalar
- Async/AwaitProgramlamanın Temelleri, s. 2Async/await, asenkron kodu sıradan adım adım kod gibi okunur biçimde yazmayı sağlayan, her await'te bir promise ya da görev bitene dek duran sözdizimidir.
- CallbackProgramlamanın Temelleri, s. 5Callback, başka bir fonksiyona argüman olarak verilen ve o fonksiyonun bir iş bittiğinde ya da bir olay gerçekleştiğinde sonradan çağırdığı fonksiyondur.
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin