JavaScript'te Promise Kullanımı Asenkron Programlamada Devrim Niteliğinde Bir Yöntem

JavaScript'te Promise Kullanımı Asenkron Programlamada Devrim Niteliğinde Bir Yöntem - bimakale.com | bimakale.com
15 Aralık 2023 Cuma - 10:07 (9 Ay önce)

Asenkron programlamada başarılı bir şekilde başa çıkabilmek için JavaScript geliştiricileri, Promise'leri kullanmaya başladılar. Bu makalede, Promise'lerin nedir, nasıl çalışır ve nasıl kullanılır sorularına detaylı bir şekilde cevap vereceğiz.

Promise Nedir?

Promise (Vaad), JavaScript'te asenkron programlamayı daha etkili ve yönetilebilir hale getirmek için kullanılan bir nesnedir. Bir işlemin başarıyla tamamlanması veya bir hata alınması gibi sonuçları temsil eder. Temelde, bir değerin gelecekteki bir zamanda tamamlanacağı veya başarısız olacağı bir yapıdır.

Promise Durumları:

  1. Pending (Bekleme): Promise henüz gerçekleşmemiş bir işlemi temsil eder.

  2. Fulfilled (Gerçekleşti): Promise, başarıyla tamamlanan bir işlemi temsil eder. Değer geri döner.

  3. Rejected (Reddedildi): Promise, başarısız olan bir işlemi temsil eder. Hata nesnesi geri döner.

Promise Oluşturma:

Promise, bir işlemin başlatılmasını ve bu işlemin sonucunu beklemenizi sağlar. Temel bir Promise yapısı şu şekildedir:

const myPromise = new Promise((resolve, reject) => {
  // İşlemler
  if (/* işlem başarılı */) {
    resolve("Başarıyla tamamlandı!");
  } else {
    reject(new Error("İşlem başarısız!"));
  }
});

myPromise.then(function(result){
  console.log(result) // 'İşlem tamam!' yazısını basar
}).catch(function(hata){
  console.log(result) // 'Bir sıkıntı var...' yazısını basar
});

Promise Zincirleme (Chaining):

Birçok asenkron işlemi sıralı bir şekilde yönetmek için Promise'ler zincirlenebilir. Bu, bir işlemin tamamlanmasını bekledikten sonra bir sonraki işlemi başlatmak için kullanılır.

firstAsyncFunction()
  .then(result => {
    return secondAsyncFunction(result);
  })
  .then(result => {
    return thirdAsyncFunction(result);
  })
  .catch(error => {
    console.error(error);
  });

Async/Await ve Promise:

ES2017 (ES8) ile birlikte gelen async ve await sözcükleri, Promise'leri daha okunabilir hale getirir. Bir fonksiyonu async olarak işaretlediğinizde, bu fonksiyon await ile işaretlenmiş Promise'in tamamlanmasını bekleyebilir.

async function myAsyncFunction() {
  try {
    const result1 = await firstAsyncFunction();
    const result2 = await secondAsyncFunction(result1);
    const result3 = await thirdAsyncFunction(result2);
    return result3;
  } catch (error) {
    console.error(error);
  }
}

myAsyncFunction().then(result => {
  console.log(result);
});

 

Promise Yapısının Avantajları:

  1. Asenkron İşlemlerin Kontrolü: Promise'ler, asenkron işlemleri sıralı bir şekilde kontrol etmek için kullanılır ve callback cehennemine düşmeden okunabilir kod yazmanıza olanak tanır.

  2. Hata Yönetimi: Promise'ler, hataların daha etkili bir şekilde yakalanmasını sağlar ve .catch() blokları ile hata yönetimini kolaylaştırır.

  3. Zincirleme ve Sıralı İşlemler: Promise'ler, sıralı işlemleri zincirleme (chaining) imkanı sunar, bu da asenkron işlemleri düzenlemeyi ve okunabilir kod yazmayı sağlar.

Promise metodları

  • Promise.resolve(): Verilen değeri, başarılı sonuçlanmış promise haline getirir. .then() içindeki fonksiyonların dönüş değeri kendiliğinden promise haline getirilir demiştik. Bu durumu `return Promise.resolve(donusDegeri)` şeklinde de düşünebiliriz.
  • Promise.reject(): Verilen değer, hata mesajı olacak şekilde başarısız(rejected) olmuş bir promise nesnesi döndürür.
  • Promise.all(): Bu metodun kullanılma amacını, paralel olarak gerçekleştirilen asenkron işlemlerin hepsinin bitip, bitmediği anlamak olarak tanımlayabiliriz. Birbirini beklemeyen asenkron işlemleri (promise’leri) zincirlersek toplam gerçekleşme süresini uzatmış oluruz. Hem bekleyen tüm işlemlerin bittiğinden emin olmak hem de bunu promise kullanarak yapabilmek Promise.all() ile mümkün. Dizideki tüm promise’ler başarılı(resolved) olduğunda tuttukları değerler de dizi halinde kullanıcıya döner. Eğer dizideki herhangi bir promise başarısız(rejected) olursa, Promise.all() sonucu oluşan promise de başarısız(rejected) olur.
  • Promise.race(): Bu metod ise adından anlaşılacağı gibi dizi içerisindeki promise’lerin yarıştırılmasıdır. En hızlı sonuca ulaşan promise dönüş değeri olarak alınır. Yalnız başarılı(resolved) veya başarısız (rejected) sonuçlanması sonucu etkilemez. Gelecekteki vaat edilen değerine (istenilen değer veya hata mesajı) ilk ulaşan promise yarışın kazananı olur ve ilk sonuc o olur.

JavaScript'te Promise kullanımı, asenkron programlamayı daha etkili ve okunabilir hale getiren önemli bir gelişmedir. Promise'ler, hata yönetimi, zincirleme ve sıralı işlemler gibi avantajlarıyla modern JavaScript projelerinde yaygın olarak kullanılmaktadır.

Javascript de kullanılan Callback ve Promise Arasındaki farkları incelemek için ilgili yazımızı okuyabilirsiniz. 


  • Javascript
  • Asenkron
  • Web Yazılım



Yorumlar
Sende Yorumunu Ekle
Kullanıcı
0 karakter