Sobes.tech
Junior

Hangi Promise türlerini biliyorsun?

sobes.tech yapay zeka

AI'dan gelen yanıt

Node.js'te temel promise türleri:

  • Basic Promise: Gelecekteki değerler veya hatalar için bir kapsayıcıdır. Üç durumu vardır: pending (beklemede), fulfilled (başarılı), rejected (reddedildi). new Promise() yapıcısı kullanılarak oluşturulur.

    // Temel bir promise oluşturma
    const myPromise = new Promise((resolve, reject) => {
      // Asenkron işlem
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("İşlem başarıyla tamamlandı");
        } else {
          reject("Bir hata oluştu");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Hemen fulfilled durumuna geçen ve belirli bir değer alan bir promise oluşturur.

    // Çözülmüş bir promise oluşturma
    const resolvedPromise = Promise.resolve("Bu zaten çözümlenmiş bir promise");
    
  • Promise.reject(): Hemen rejected durumuna geçen ve bir hata nedeni alan bir promise oluşturur.

    // Reddedilmiş bir promise oluşturma
    const rejectedPromise = Promise.reject(new Error("Bu reddedilmiş bir promise"));
    
  • Promise.all(): Bir dizi promise alır ve yeni bir promise döner. Tüm promise'lar başarıyla tamamlandığında fulfilled durumuna geçer. Değeri, girişteki promise'ların aynı sırasına göre sonuçların dizisidir. Herhangi biri reddedilirse, Promise.all() ilk reddedilen promise nedeni ile hemen reddedilir.

    // Promise.all() kullanımı
    const promise1 = Promise.resolve(1);
    const promise2 = Promise.resolve(2);
    const promise3 = new Promise((resolve, reject) => setTimeout(() => resolve(3), 100));
    Promise.all([promise1, promise2, promise3])
      .then((values) => {
        // values [1, 2, 3]
      })
      .catch((error) => {
        // Hata işleme
      });
    
  • Promise.allSettled(): Bir dizi promise alır ve yeni bir promise döner. Tüm promise'lar tamamlandığında fulfilled veya rejected durumuna geçer. Değeri, her promise'ın sonucu hakkında durumu ve değeri/nedenini açıklayan nesnelerin dizisidir. Promise.all()'dan farklı olarak hemen reddedilmez.

    // Promise.allSettled() kullanımı
    const promiseA = Promise.resolve("başarı");
    const promiseB = Promise.reject("hata");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results, nesnelerin dizisi olacaktır:
        // [{status: 'fulfilled', value: 'başarı'}, {status: 'rejected', reason: 'hata'}]
      });
    
  • Promise.race(): Bir dizi promise alır ve yeni bir promise döner. İlk tamamlanan promise'ın sonucu/nedenine göre fulfilled veya rejected durumuna geçer.

    // Promise.race() kullanımı
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Ben hızlıyım!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Ben yavaşım..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value "Ben hızlıyım!" olacak
      });
    
  • Promise.any(): Bir dizi promise alır ve yeni bir promise döner. Başarıyla tamamlanan ilk promise'in değeri ile fulfilled durumuna geçer. Tüm promise'lar reddedilirse, Promise.any() bir AggregateError hatası döner, bu hata tüm reddedilen promise'ların nedenlerini içerir. Node.js 12 ve sonrası için kullanılabilir.

    // Promise.any() kullanımı
    const promiseFail1 = Promise.reject("Hata 1");
    const promiseSuccess = Promise.resolve("Başarı!");
    const promiseFail2 = Promise.reject("Hata 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value "Başarı!" olacak
      })
      .catch((error) => {
        // Tüm promise'lar reddedilirse, AggregateError işlenir
      });