JavaScript'te Promise Nedir?

JavaScript'te Promise, asenkron işlemleri yönetmek ve gelecekte tamamlanacak bir işlem sonucunu temsil etmek için kullanılan bir nesnedir. Promise, bir değerin gelecekteki bir zaman diliminde başarılı olacağını veya başarısız olacağını temsil eder.

Promise Oluşturma

Bir Promise nesnesi oluşturmak için new Promise() kullanılır ve içine bir fonksiyon alır. Bu fonksiyonun iki parametresi vardır: resolve ve reject. resolve, Promise başarılı olduğunda çağrılırken, reject, Promise başarısız olduğunda çağrılır.

let myPromise = new Promise((resolve, reject) => {
  // Asenkron işlem
  if (true) {
    resolve('Başarılı!');
  } else {
    reject('Hata oluştu!');
  }
});

Promise Zincirleme (Chaining)

Promise'ler, birbirlerini zincirleme yaparak ardışık işlemleri gerçekleştirmek için kullanılabilir. Bu sayede daha okunabilir ve yönetilebilir asenkron kod yazmak mümkün hale gelir.

myPromise
  .then((data) => {
    console.log(data); // Başarılı!
    return 'İkinci aşama!';
  })
  .then((data) => {
    console.log(data); // İkinci aşama!
  })
  .catch((error) => {
    console.log(error); // Hata oluştu!
  });

Promise All ve Promise Race

Promise.all() ve Promise.race() fonksiyonları, birden fazla Promise nesnesini işlemek için kullanılır. Promise.all() tüm Promise'lerin tamamlanmasını beklerken, Promise.race() en hızlı tamamlanan Promise'in sonucunu döndürür.

let promise1 = new Promise((resolve) => setTimeout(() => resolve('içerik1'), 2000));
let promise2 = new Promise((resolve) => setTimeout(() => resolve('içerik2'), 1000));

Promise.all([promise1, promise2]).then((values) => {
  console.log(values); // ['içerik1', 'içerik2']
});

Promise.race([promise1, promise2]).then((value) => {
  console.log(value); // içerik2
});

async/await ile Promise Kullanımı

async ve await anahtar kelimeleri, Promise'leri daha okunabilir hale getirmek için kullanılır. await, bir Promise'in tamamlanmasını bekler ve sonucunu döndürür.

async function fetchData() {
  try {
    let result = await myPromise;
    console.log(result);
  } catch (error) {
    console.log(error);
  }
}

fetchData();

Sonuç

JavaScript'te Promise, asenkron programlamada büyük öneme sahip ve daha karmaşık işlemleri daha düzenli bir şekilde yönetmemizi sağlayan bir yapıdır. Promise'ler, veri alma, dosya okuma, ağ istekleri gibi asenkron işlemlerde çok kullanışlıdır ve modern JavaScript kodlarında sıkça karşılaşılır.