Javascript Promise
17 Mart 2022Promise nedir ve ne işe yarar?
Promise'ler async (asenkron) işlemler yapabilmenin yollarından biridir. Asenkron işlemleri anlamak hayali bir senaryo düşünelim;
Kahvaltı için omlet ve çay hazırladığınızı düşünün. Öncelikle çay için suyu kaynatmaya başladınız. Su kaynarken başında durup aval aval suya bakarsanız senkron bir iş yapmış olursunuz. Ancak su kaynarken omlet yapmaya girişirseniz asenkron bir iş yapmış olursunuz.
Asenkron konseptine daha detaylı bir bakış için okuyabilirsiniz
Bir Promise 3 durumda olabilir :
- pending : Başlangıçtaki state budur. Promise ne tamamlanmış ne de başarısız olmuştur. (Baştaki senaryoya uyarlarsak ne su kaynamış ne de suyun kaynamasını herhangi bir sebeple başarısız olmuştur.)
- fulfilled : İşlem başarıyla sonuçlandığında Promise'in bulunduğu stage budur. (Su başarıyla kaynamıştır.)
- rejected: İşlem başarısız olmuştur. (Herhangi bir sebeple su kaynamamıştır.)
Promise oluşturma
Javascript'te Promise oluşturmak için Promise constructor
kullanabiliriz. Constructor'u oluştururken callback function'ınmız resolve
ve reject
parametrelerini içermeli.
Başlangıçtaki senaryomuz için bir Promise oluşturalım;
Aynı promise'in başarısız olduğu kod ise şu şekilde olacaktır:
Yukarıdaki örneklerde de görebileceğiniz gibi Promise'i tüketirken .then
.cath
metodlarıyla birlikte callback
fonksiyonları tanımlıyoruz. Bu örnekteki gibi basit bir fonksiyonda sorun yaratmasa da daha karmaşık projelerde callback hell
diye tabir edilen kodun anlaşılmasının zorlaşacağı bir duruma evrilebilir. Bu duruma çözüm olabilecek yollardan biri async/ await
kullanmaktır.
async / await
async / await yapısını kullanmak için bir Promise
dönecek fonksiyonun önüne async
ekleyip, Promise değerini saklamak istediğimiz değişkenin önüne ise await
keywordünü eklememiz yeterli.
Referanslar
https://flaviocopes.com/javascript-promises/
https://github.com/Asabeneh/30-Days-Of-JavaScript/blob/master/18_Day_Promises/18_day_promises.md