Kadir Kasim | Freelance Code Developer

kadir kasim


Yıldız Teknik Üniversitesi Mezunu

Matematik Mühendisi

Yazılımcı

California - Kütahya - İstanbul - Maryland güzargahında 29 yıllık göçebe bir yaşam

Kız labrador babası

Kitapsever keyif insanı

Yüzümden bir şeyler aktı aktı
İçim de menekşelendi Hilmi Bey
Gökyüzü gibi bir şey bu çocukluk
Hiçbir yere gitmiyor.

Edip Cansever

EcmaScript 6 ile iyiden iyiye hayatımıza girmiş olan Promise yapıları , asenkron çalışan JavaScriptte fonksiyonlarımızı veya işlemlerimizi bir düzene koymada veya sistemde bir değeri veya işlemi bekleyebilmemizi sağlamada büyük iş görüyor. Hatta sonu gelmeyen Callback fonksiyonlardan yorulmuş yazılımcılarda ilaç etkisi bile yaratmış olabilir.

Bildiğiniz üzere biz JavaScriptte fonksiyonlarımızı bir sırayla çalıştırmak istediğimizde callback fonksiyonlardan yararlanıyorduk. Basitçe bir parametre olarak gönderdiğimiz fonksiyonu çalışmasını istediğimiz zaman çağırıyorduk. Promise yapısında ise kod bloğumuzda new ön eki ile bir söz verdiğimizi söylüyor ve sistemi beklemeye alıyoruz. Daha sonra içerisinde iki parametreden alan bir fonksiyon tanımlıyoruz. Bu parametrelerden ilkini işlerimiz yolunda gitmesi halinde değer döndürmek için kullanıyoruz. Aksi halde ikinci parametre ile hata değeri döndürebiliyoruz. Aşağıda parametre isimleri resolve ve reject olarak belirlenmiş durumda. Esasında bu isimlendirmenin bir önemi yok istediğimiz gibi yapabilirdik.

const sozumuz = new Promise((resolve,reject)=>{ let islem = true; if (islem) resolve("Hersey umdugumuz gibi gitti.."); else reject("Bir sorunla karsilastik ve islem tamamlanmadi."); }); sozumuz.then((data)=>{ console.log(data); });

Yukarıda ki örnekte işlemlerimizin umduğumuz gibi gittiğini varsaydık ve geriye resolve ile bir değer gönderdik. Burada önemli nokta resolve ile gönderilen değerler then ile yakalanır iken reject için catch kullanmamız gerekiyor. Yani yukarıdaki örnekte işlem değişkenine false değeri verilirse hata ile karşılacağız. Olması gereken :

const sozumuz = new Promise((resolve,reject)=>{ let islem = false; if (islem) resolve("Hersey umdugumuz gibi gitti.."); else reject("Bir sorunla karsilastik ve islem tamamlanmadi."); }); sozumuz.then((data)=>{ console.log(data); }).catch((err)=>{ console.log(err); });

Ayrıca Promise yapısını doğrudan return değeri olarakta tanımlayabiliriz. Hatta bir fonksiyon içersinde tanımlayıp değerde gönderebiliriz.

function sozumuz(islem) { return new Promise((resolve, reject) => { if (islem) resolve("Hersey umdugumuz gibi gitti.."); else reject("Bir sorunla karsilastik ve islem tamamlanmadi."); }); } sozumuz(true).then((data)=>{ console.log(data); }).catch((err)=>{ console.log(err); });

Ve son olarak bence Promise yapısının en güzel yanı Promise Chain. Promise zinciri olarak çevirebileceğimiz bu yapı bize sıralı fonksiyonlarımızı bir düzen içersinde yazmamızı sağlıyor. Şöyle ki bir then içerisinde return değeri oluşturulursa peşi sıra gelen then ile yakalanabilmekte.

function kareAl(data) { return new Promise((resolve, reject) => { if (data < 100) resolve(data * data); else reject('Aldın başını gidiyorsun !'); }); } kareAl(2).then((data)=>{ console.log(data); return kareAl(data); }).then((data)=>{ console.log(data); return kareAl(data); }).then((data)=>{ console.log(data); return kareAl(data); }).catch((err)=>{ console.log(err); });

Örnek kodlara GitHub üzerinden ulaşabilirsiniz ..

Tartışma Başlatmak İster Misiniz ?

Eposta adresiniz paylasılmayacaktır..

Daha Önceki Yazılar