Asenkron Mayhem: Async/Await ve Promises ile İşlem Tiplerini İhale Etmek

Asenkron Mayhem: Async/Await ve Promises ile İşlem Tiplerini İhale Etmek

Asenkron Mayhem kitabı, işlem tiplerini daha verimli bir şekilde yönetmek isteyen geliştiriciler için Async/Await ve Promises teknolojilerini kullanarak pratik örnekler sunuyor İleri seviye JavaScript becerileri için ideal bir kaynak!

Asenkron Mayhem: Async/Await ve Promises ile İşlem Tiplerini İhale Etmek

JavaScript, günümüz web uygulamaları dünyasında en çok kullanılan dillerden biridir. Ancak, bazı işlemler asenkron olarak gerçekleştiriliyor ve yapılması gereken işlemin ne zaman tamamlandığı belli değil. Bu tür işlemleri yönetmek için, JavaScript'te promises ve async/await kullanabilirsiniz.

Yaptığınız işlemleri tanımlayarak asenkron hale getirmek için, promiseler, callback'lerden daha esnek ve daha okunaklı bir yapı oluşturmanızı sağlar. Promiseler ayrıca, bir işlemin çalıştığı zaman yanıtı işleme devreder ve bir sonraki işlem için karar verebilmeniz için yanıt verir. Bu özellikleri sayesinde, promiseler yığılmaları önleyen bir özellik sunar.

Async/await, JavaScript'te asenkron işlemleri daha okunaklı bir şekilde yazmak için kullanılan bir yapıdır. Kullanımı, promises kullanımlarında olduğu gibi bir işlemenin yapılıp yapılamayacağını bilmenizi sağlar, ancak onu daha okunaklı ve kolay bir şekilde yazmanıza olanak tanır. Bir web servisine istek yapmak ve sonucun beklenmesi veya bir dosyanın okunması gibi asenkron işlemleri yönetirken async/await ve promiseler size büyük kolaylık sağlar.


Async/Await Nedir?

JavaScript'te, asenkron işlemlerin yapılması sırasında işlemler birbiri ardına gerçekleşir ve bunları okunaklı bir şekilde yazmak oldukça zordur. Bu noktada, async/await yapısı devreye girer ve kolay bir kullanım sağlar. Async/await yapısı, bir işlemin asenkron olarak yapılıp yapılamayacağını kontrol eder ve işlem tamamlanana kadar bekler. Bu yapının kullanımı promises ve callback yöntemlerinden daha okunaklı ve daha kolaydır.

Özellikle büyük ve kapsamlı projelerde async/await yapısının kullanımı daha da önem kazanır. Bu yapının kullanımı sayesinde, işlemler daha kısa, daha okunaklı ve daha anlaşılır bir şekilde yazılabilir. Bu sayede, kodların hatalı olması ya da işlevsiz olması riski de azaltılmış olur.

Buna ek olarak, async/await yapısı, JavaScript kodlarının performansını da arttırır. Çünkü bu yapı sayesinde, işlemler birbirine bağımlı olmadan paralel bir şekilde çalışabilir. Bu da, kodların daha hızlı bir şekilde çalışmasını sağlar ve kullanıcılar tarafından daha iyi bir deneyim sunar.


Promises Nedir?

Promiseler, JavaScript'te asenkron işlemleri yönetmek için kullanılan bir yapıdır. Bu yapı, bir işlemin yapıldıktan sonra yapılacak işlemleri içinde barındırabilir. Promiseler, bir işlem başarılı veya başarısız olursa geri dönen yanıtlarla birlikte kullanılabilirler. Bu yanıtlar, işlemenin sonucuna bağlı olarak değişebilir ve sonucu işleme devrederler.

Promiseler aynı zamanda yığılmaları önleyen bir özellik sunarak, callback'lerden daha esnek ve daha okunaklı bir yapı oluşturmanızı sağlar. Promiseler için 'then' adlı bir yapısı bulunur. Bu yapısı, bir işlemin çalıştığı zaman yanıtı işleme devreder ve bir sonraki işlem için karar verebilmeniz için yanıt verir. Bu sayede bir işlem yapılırken diğer işlemlerinde yapılabilmesi sağlanmaktadır.

Promiseler, birçok işlemde kullanılabilir. Örneğin, bir dosyanın okuması, bir web sayfasının yüklenmesi veya bir veritabanına bağlanıp işlem yapma gibi işlemler için kullanılabilir. Promiseler ile işlemler daha esnek ve daha okunaklı bir şekilde yönetilir ve daha hızlı bir sonuç alınabilir.


Promiselerin Avantajları Nelerdir?

Promiseler, JavaScript'te kullanımı giderek artan bir yapıdır. Promiseler, callback'lerden farklı olarak daha esnek ve okunaklı bir yapı sunar. Promiselerin en büyük avantajlarından biri, yığılmaları önleyen bir özellik sunmasıdır. Bu sayede, işlemleri sırayla yürütmek yerine önceliklerine göre paralel çalıştırabilirsiniz.

Promiseler ayrıca, bir işlem bitene kadar beklemek gibi birçok durumda çok daha kullanışlıdır. Bunun sebebi, yanıtı işlemden sonra almanızı sağlamasıdır. Bu sayede, uygulamanızın yavaşlamasını engelliyor ve daha iyi bir performans elde ediyorsunuz.

Promiseler ayrıca, bir zincirleme işlem oluşturabilirsiniz. Örneğin, bir sorgunun sonucu diğer sorgunun parametresi olarak kullanılabilir. Bu da size daha esnek bir yapı sunarak, işlemleri ciddi derecede kolaylaştırır.


Promiseler Yanıtları İşler

Promiseler, bir işlemin tamamlandığı zaman yanıtı işleme devreder ve bir sonraki işlem için karar vermeniz için yanıt verir. Bu, özellikle asenkron işlemlerde çok önemlidir, çünkü işlemler başka işlemlere bağlıdır ve her bir yanıt diğer işlemler için ne yapacağınıza karar vermenizi sağlar. Örneğin, bir dosya okunurken, dosya tamamen okunmadan yanıt vermek mümkün değildir, buna karşılık, yanıt alındığında ne yapılacağı karar verilebilir.

Promiseler, ayrıca hata yönetimini de kolaylaştırır, çünkü bir işlem başarısız olduğunda, hemen hata mesajı verir ve hatanın nasıl giderilebileceğine karar vermenizi sağlar.

Özetle, promiseler, asenkron işlemleri yönetmek için modern bir yapıdır ve daha esnek bir hata yönetimine izin verir.


Promiseler Zincirleme Olarak Kullanılabilir

Promiseler, sorguları zincirleme şekilde kullanabilme özelliği sunar. Bu zincirleme yapısı şöyle işler: Bir işlem sonucuna bağlı olarak yapacak bir sonraki işlemi parametre olarak kullanarak tekrar bir işlem gerçekleştirilir. Bu özellik sayesinde, bir işlem sonucu diğer bir işlemin başlangıcı olabilir ve bu sayede sorguların daha verimli bir şekilde yapılması hedeflenir.

Örneğin, bir dizideki sayıların toplamını bulmak için aşağıdaki zincirleme örneği kullanılabilir:

Aşama İşlem Sonuç
1 Sayı dizisi oluştur [11, 22, 33]
2 Dizideki sayıları topla 66
3 Sonucu bir sonraki işlemin parametresi olarak kullan 66
4 Sonucun 2 katını bul 132

Birinci aşamada sayı dizisi oluşturulur. İkinci aşamada, dizideki sayılar toplanır ve sonuç 66 olarak elde edilir. Üçüncü aşamada, önceki işlemin sonucu bir sonraki işlem için parametre olarak kullanılır. Dördüncü aşamada, önceki işlem sonucunun 2 katı bulunarak sonuç 132 olarak elde edilir. Bu örnek, promiselerin zincirleme şekilde kullanımını gösterir.


Async/Await ile Promiseler Arasındaki Fark Nedir?

Async/await ve promises birbirinden farklı yöntemlerdir, ancak asenkron işlemleri daha okunaklı hale getirmek için kullanılırlar. Promiseler, asenkron işlemleri yönetmek için kullanılır ve içinde işlem bitince yapılacak olan işlemler de bulunabilir. Bu şekilde, promiseler yığılmaları önleyen bir özellik sunar ve callback'lerden daha esnek ve daha okunaklı bir yapı oluşturmanızı sağlar. Promiseler, bir işlemin çalıştığı zaman yanıtı işleme devreder ve bir sonraki işlem için karar verebilmeniz için yanıt verir, böylece sorguları zincirleme olarak kullanabilirsiniz.

Async/await yapısı promises kullanımı gibidir, ancak işlemleri daha okunaklı ve kolay bir şekilde yazmanızı sağlar. Bu yapı, bir işlemin yapılıp yapılamayacağını bilmenizi sağlar, ancak onu daha okunaklı hale getirmek için kullanılır. Bu nedenle, async/await ve promises arasında bir seçim yapmak, işlemleri daha iyi bir şekilde okunabilir hale getirmenize yardımcı olacak ve asenkron işlemlerinde daha fazla kontrol sahibi olmanızı sağlayacaktır. Tabii ki, bu karar verilirken dikkate alınması gereken birçok faktör vardır, ancak hangi yöntemi seçerseniz seçin, programlama işlemlerinde daha az hata yapmanızı ve daha verimli bir şekilde çalışmanızı sağlayacaktır.


Ornekler

Asenkron işlemleri daha okunaklı ve kolay bir şekilde yazmanızı sağlayan async/await ve promises yapısı, pek çok kullanım örneği sunar. İşte birkaç örnek:

Bir dosya okuma işlemi yapmak istediğinizde kullanabileceğiniz bir promises örneği şöyle olabilir:

Dosya Adı İçerik
example.txt Hello World
const fs = require('fs');function dosyaOku(ad) {  return new Promise(function (cozumleyici, reddetme) {    fs.readFile(ad, function (err, veri) {      if (err) {        reddetme(err);      } else {        cozumleyici(veri.toString());      }    });  });}dosyaOku('example.txt')  .then(function (icerik) {    console.log(icerik);  })  .catch(function (hata) {    console.error(hata);  });

Bu örnekte, fs.readfile işlemi promises yapısı kullanılarak gerçekleştirilmiştir.

Bir web servisine istek yapmak ve sonucun beklenmesi için async/await yapısının kullanımı şöyle örneklenir:

async function servisIstegiYap() {  try {    const yanit = await fetch('https://jsonplaceholder.typicode.com/todos/1');    const veri = await yanit.json();    console.log(veri);  } catch (hata) {    console.error(hata);  }}servisIstegiYap();

Bu örnekte, fetch fonksiyonu bir promise döndürür ve async/await kullanarak bu promise'ın sonucunu alıyoruz.


Promiseler Örnek

Promiseler, asenkron işlemleri yönetmek için kullanılan bir yapı olarak JavaScript'te oldukça önemlidir. Bunun bir örneği olarak, bir dosyanın okunması işlemini ele alabiliriz. Dosyanın okunması örneğinde öncelikle "fs" modülü kullanarak dosya okuma işlemi gerçekleştirilir. Ardından, promiselerin avantajlarından biri olan zincirleme olarak kullanma özelliği kullanılarak dosyanın okunması işlemi yapılır.

Dosya İsimleri Dosya İcerigi
file1.txt Bu dosya ilk örnel için yazılmıştır.
file2.txt Bu dosya ikinci örnel için yazılmıştır.

Örnek kod:

var fs = require('fs');var readFile = function(filename){  return new Promise(function(resolve, reject){    fs.readFile(filename, 'utf8', function(err, data){      if(err) reject(err);      else resolve(data);    });  });};readFile('file1.txt').then(function(data){  console.log(data);  return readFile('file2.txt');}).then(function(data){  console.log(data);}).catch(function(err){  console.log(err);});

Bu kod örneğinde sırasıyla "file1.txt" ve "file2.txt" dosyaları okunarak içerikleri konsol ekranına yazdırılır. Promiseler kullanılarak, hata kontrolü de sağlanır ve dosya okuma işleminin gerçekleşmesiyle birlikte diğer işlemler zincirleme olarak devam eder.


Async/Await Örneği

Async/await yapısının kullanımı, JavaScript'te tek tek çalışan fonksiyonların bir araya getirilmesi ile daha okunaklı ve anlaşılır şekilde yazabilmenizi sağlar. Bununla birlikte, web servislerine istek yaparken de async/await yapısını kullanabilirsiniz. Bu kullanım, web servisine yapılan isteğin sonucunu beklemek için iyi bir yöntemdir. Örneğin, bir web servisine GET isteği yapmak için fetch() fonksiyonunu kullanabilirsiniz. Bu isteğin sonucu promises yapısı ile elde edilir. Aşağıdaki örnekte, bir web servisine GET isteği yaparak sonucun async/await structuring kullanılarak beklenmesi gösterilmektedir:

async function getData(){ try{ const response = await fetch('https://api.example.com/data'); const data = await response.json(); console.log(data); } catch(error){ console.log(error); } }

Yukarıdaki kodda, fetch() fonksiyonu web servisine bir GET isteği yapar ve sonucu alan response değişkenine atar. Bu sonucu response.json() fonksiyonu ile JSON formatına dönüştürür, ve son olarak async/await yapısı kullanarak beklemesi sağlanır. Böylece, sonuç gelene kadar program akışı durdurulur ve sonucun gelmesi beklenir. Sonuç, data değişkeninde saklanır ve son olarak console.log() fonksiyonu kullanılarak ekranda görünür hale getirilir.

Özetle, async/await yapısı, JavaScript'teki asenkron işlemleri daha okunaklı ve anlaşılır şekilde yazmanızı sağlar. Ayrıca, web servislerine yapılan isteklerde de kullanılarak sonuçların beklemesini sağlar ve daha iyi bir program yapısını oluşturmanızı sağlar.