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ı

Büyük işler için büyümek gerek kimi kazanarak büyür bense kaybederek büyüyorum..

KK

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 :

JavaScript asenkron çalışan bir programlama dili olduğu için bir fonksiyonun işlemini tamamlaması beklenmeden bir sonraki fonksiyona geçiş yapılır. Bu durum bir çok programlama dilinde karşımıza çıkmadığı için JavaScript ile yeni ilgilenenler için baş ağrısı yaratabilir. mutlu Ancak Callback Fonksiyonları öğrendikten sonra işimizin o kadar da zor olmadığını anlayacağız.

Javascriptin çalışma mantığını anlamak için basit bir senaryo düşünelim, bir restorantta arka arkaya iki müşteri sipariş verecek bunlardan ilki bir iskender , ikincisi ise bir bardak su istiyor. İskenderin servis edilmesi tabiki bir bardak sudan daha uzun sürecek ve ikinci müşteri suyunu aldığında ilk müşteri hala bekliyor olacak. Burada ilk müşterinin siparişi, ikinci müşterinin siparişine engel olmamakta yani restorant asenkron olarak servis vermekte diyebiliriz.

Eğer yukarıdaki örnek çok birşey ifade etmediyse gelin birde senkron çalışan bir kod yapısından bahsedelim. Mesela Php ile MySQL bağlantısı gerçekleştirdiğinizde bu işlem biraz zaman alabilir ancak sunucunuz bağlantınız gerçekleşene kadar bekleyecek ve diğer komutlarınızı çalıştırmayacak. Eğer bağlantı yapılırken diğer komutlarınız çalıştırılsaydı database bağlantınızı kullanarak yazdığınız methodlarda hata alacaktınız. Yani senkron yapıda bir fonksiyon kendinden sonra gelen fonksiyonları bloklarken , asenkron yapıda bloklama yapılmaz.

Hadi biraz kod yazarak detaylandıralım. İlk olarak 2 farklı fonksiyon tanımlayalım ve bunları sırasıyla çağıralım.

function adimiYaz(ad){ console.log("Adiniz : " + ad); } function soyadimiYaz(soyad) { console.log("Soyadiniz : " + soyad); } adimiYaz("Kadir"); soyadimiYaz("Kasim");

Burada standart biçimde iki fonksiyon oluşturduk ve çalıştırdık.

Adiniz : Kadir Soyadiniz : Kasim

Yukarıdaki gibi bir çıktı almamız son derece normal çünkü iki fonksiyonda hızlı bir biçimde işlemini tamamladı.

Şimdi farzedelimki adimiYaz işlemini iki saniyede tamamlıyabiliyorken soyadimiYaz işlemini bir saniyede tamamlıyor. Örnek olması için ben bu tamamlanma sürelerini setTimeout fonksiyonunu kullanarak düzenleyeceğim. setTimeout fonksiyonu genelde çalıştırılacak fonksiyona bir gecikme süresi koymak için kullanılır.