return await Promise ile return Promise farki

programming, typescript, javascript, promise, await, return

return promise ve return await promise arasındaki fark, hata yakalama ve fonksiyonun dönüş değerinin zamanlaması ile ilgilidir.

return promise ifadesi, promise'in çözülmesini beklemez ve hemen promise'i döndürür. Bu durumda, promise'in çözülmesi veya reddedilmesi, fonksiyonun dışında yönetilir.

async function foo() {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve('resolved'), 1000);
  });
}

return await promise ifadesi, promise'in çözülmesini bekler ve promise'in çözüm değerini döndürür. Bu durumda, promise'in çözülmesi veya reddedilmesi, fonksiyonun içinde yönetilir ve hata yakalama (try/catch) blokları kullanılabilir.

async function foo() {
  return await new Promise((resolve, reject) => {
    setTimeout(() => resolve('resolved'), 1000);
  });
}

Ancak, genellikle return await promise kullanımı gereksizdir ve ESLint gibi bazı linterlar tarafından uyarı olarak işaretlenir. Çünkü async fonksiyonlar zaten bir Promise döndürür ve await ifadesi genellikle try/catch blokları içinde hata yakalamak için kullanılır.


Bir fonksiyon içerisinde return await promise ile return promise kullanımı arasında pratikte önemli bir fark bulunmaktadır. Bu fark, özellikle hata yönetimi ve fonksiyonun async olup olmadığına bağlıdır. Detaylıca açıklamak gerekirse:

  1. return promise kullanımı: Bu kullanımda, promise doğrudan çağrılan yere geri döndürülür. Fonksiyon içindeki promise'in çözümlenmesi veya reddedilmesi, fonksiyonu çağıran üst seviyedeki kod tarafından ele alınır. Bu durumda, promise, fonksiyonun dışına taşınmış olur ve fonksiyonun dönüş değeri olarak promise nesnesi döner.

    function fetchData() {
      const promise = fetch('<https://api.example.com/data>');
      return promise; // Promise döner, resolve ya da reject olması dışarıda ele alınır
    }
    
  2. return await promise kullanımı: Burada await, promise'in çözülmesini bekler ve sonucu döner. Eğer promise reddedilirse, hata o noktada ele alınır ve fonksiyonun içindeki bir try/catch bloğu ile yakalanabilir. Bu kullanım, özellikle async fonksiyonlar içinde hata yönetimi yaparken tercih edilir. Bu kullanım, bir anlamda fonksiyonun içindeki hata işleme mekanizmasını daha kolay kontrol etmeye olanak tanır.

    async function fetchData() {
      try {
        const response = await fetch('<https://api.example.com/data>');
        return response; // Çözümlenmiş değer döner
      } catch (error) {
        console.error('Error fetching data:', error);
        throw error; // Hata dışarıya fırlatılabilir veya özel bir şekilde işlenebilir
      }
    }
    

Performans Açısından Farklar:

  • return await kullanımı genellikle gereksiz olabilir ve bazı durumlarda hafifçe daha yavaş olabilir çünkü JavaScript motoru ekstra bir bekleyiş (wait) durumunu işlemek zorundadır. Ancak, bu bekleyiş hata yakalama ve fonksiyon içindeki iş akışını yönetme açısından önemlidir.

  • return promise daha hızlı ve daha doğrudan bir yaklaşım sağlar çünkü ekstra bir adım olmaksızın promise'i doğrudan döndürür.

Sonuç olarak:

  • Eğer fonksiyonunuz içinde hata işleme yapmanız gerekiyorsa veya fonksiyon çıktısının başka bir değerle değiştirilmesi gerekiyorsa, return await kullanmanız daha uygun olabilir.

  • Ancak, sadece bir promise'i döndürüp, hata işlemeyi ya da sonuç işlemeyi fonksiyonu çağıran kod parçasına bırakmak istiyorsanız, return promise kullanımı daha temiz ve etkili olacaktır.

Last updated

© 2024 ~ Yunus Emre Ak ~ yEmreAk