Javascript 16 — Es6 Promise

Ömer Çelik
2 min readFeb 24, 2019

--

Ajax, asenkron işlemleri yönetmemizi sağlıyordu.
Yani asenkron işlemleri senkron bir hale çevirmemizi sağlıyordu.

Çok fazla callback çağrımında hata yönetimi ve oluşan kod okuma zorluğu callback’in dezavantajlarındandır. Bu dezavantajlardan kurtulmak için promise’ler çıkmıştır. Es6 ile birlikte gelmiştir.

Örnek ;
Diyelim ki bilgisayarımız bozuldu. Tamir için bilgisayarcıya verdik pcyi. Bu aralıkta biz pending durumundayız. Daha sonra 1 gün kaç gün sonra tamirci bize olumlu bilgisayarını yaptım al diye dönüş yapabilir. Yada olumsuz bilgisayarını tamir edemedik diye dönüş yapabilir. Yani 3 adet durum var . Pending, olumlu ve olumsuz. Promise’lerde aynen bu şekilde 3 adet state vardır. Birazdan bunları görücez.

Kodlarımızda rest api‘ ye istek atmak gibi işlemler yapacaksak promise kullanılabilir.

Promise’lerde 3 tane state vardır demiştik. Pending durumu , başarılı durum ve hata durumu.
Yukarıdaki getData function’ında 5 saniye boyunca state=pending olur. Daha sonra case’e göre resolve veya reject çağrılır. (resolve ve reject isimleri önemli değildir. Sadece sıralama da ilk parametre başarılı durumu , 2.si başarısız durumu gösterir. )Promise’de eğer state başarılı ise yani data başarılı bir şekilde döndüyse resolve function’u çağrılır. resolve function’ı da then function’ını tetikler. Biz bu resolve’u alabilmek için then functionı aynı şekilde reject için ise catch function’i ekleriz methodumuza.
Böylece bir hata olursa catch’e , herşey yolunda ise resolve’a düşer. Yani status resolve olunca then blogu calısır.

Aynı kod bloğunu arrow function’lı olarak örneğinide aşağıya veriyorum.

Promise nesnesini new’lemeden direk kullanabileceğimiz bazı methodlar vardır. Birinin örneğini vericem ;

const tumIslerBitti = Promise.all([promise1, promise2, …]);

Promise’lerden oluşan bir dizinin gelecekteki değerlerinin hepsinin başarılı sonuçlanması için oluşturulan promise nesnesi.

Promise Örnekler

Yukarıdaki örneğimizde addTwo adında promise dönen bir function yazdık. Promise objemiz resolve ve reject denilen 2 adet parameter alır. Bunların isimlerini resolve ve reject diye vermek zorunda değiliz. Sadece ilk parameter olumlu sonuclar için 2 .parameter hata durumları için kullanırsak yeterlidir.

Hatırlatma : Callback functionlar da, bir function içerisine başka bir function vererek , belirli işlemler tamamlandıktan sonra parameter olarak verdiğimiz functionın çağrılmasını sağlayarak asenkron olayları yönetiriz.

Promise adındaki özel bir functionımız , bu içerisine callback function alır. Biz ona function veriyoruz. Verdiğimiz function 2 parametreli olarak yapıyoruz. Aslında bu 2 parametre Promise in kendi içerisindeki functionlar. Yani callback functionlar. Çeşitli işlemlerimizi yaptıktan sonra biz o parametrelerdeki functionları(resolve,reject) çağırıp valuemizi veriyoruz. O functionda then veya catch diye bir funtionı çağırır. Böylece tüm işlemin sonucunu then veya catche aktarmış olur. Bizde oralardan yakalarız.

Ayrıca then içerisinde de return edersek o da bir Promise döner. Onuda tekrar then diyerek yakalarız.

Bir rest örneği;

Makalelerimin tamamına erişmek isteyen arkadaşlar için hepsinin linkinin bulunduğu bir tutorial hazırladım. Aşağıdaki linkte paylaşıyorum.

https://medium.com/@omercelikceng/javascript-makalelerimin-tamam%C4%B1-45a71ac3b386

--

--