Ana içeriğe geç

Async/Await

Okunuşu
eysink ıveyt
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/async-await

Kısaca

Async/await, asenkron kodu sıradan adım adım kod gibi okunur biçimde yazmayı sağlayan, her await'te bir promise ya da görev bitene dek duran sözdizimidir.

Async/await nedir?

Async/await, ağ istekleri ya da dosya okuma gibi şeyleri bekleyen asenkron kodu yazmayı ve okumayı kolaylaştıran bir anahtar sözcük çiftidir. Bir fonksiyonu async ile işaretler, içinde de zaman alan bir işlemin önüne await koyarsınız. Fonksiyon o satırda sonuç hazır olana dek duraklar ve değerle devam eder.

JavaScript'te async/await promise'lar üzerine kuruludur. async bir fonksiyon her zaman bir promise döndürür; await ise bir promise sonuçlanana dek bekler ve size değerini verir ya da hatasını fırlatır. Bu sayede başarısızlıkları .catch() çağrılarını zincirlemek yerine sıradan bir try/catch bloğuyla yönetebilirsiniz.

await ile duraklamak tüm programı dondurmaz. Bir fonksiyon beklerken çalışma ortamı tıklamalara yanıt vermek ya da başka istekleri işlemek gibi diğer işleri yapmaya devam eder ve sonuç geldiğinde fonksiyonu kaldığı yerden sürdürür. Bu, ocağa bir tencere su koyup suyun ısınmasını izleyerek beklemek yerine sebze doğramaya benzer.

async/await kalıbı C#, Python, Rust, Kotlin ve Swift dahil birçok başka dilde de vardır. Sık yapılan bir hata, birbirinden bağımsız işlemleri art arda beklemektir; bu, onların sırayla çalışmasına yol açar. Birbirine bağlı değillerse hepsini birlikte başlatın ve Promise.all ile hepsinin bitmesini bekleyin.

Bir bakışta

Bir async fonksiyonun zaman çizelgesi: loadUser() await fetch() satırına kadar çalışır, sonra programı engellemeden duraklar; bu arada program bir tıklamayı ve başka bir isteği işler, promise sonuçlanınca loadUser() kaldığı yerden devam eder.await fetch()promise sonuçlanırloadUser()çalışırduraklar, beklerdevam ederDiğer işlertıklamabaşka istekzaman
await yalnızca bu fonksiyonu duraklatır. Programın geri kalanı promise sonuçlanana dek çalışmayı sürdürür, ardından fonksiyon kaldığı yerden devam eder.

Önemli noktalar

  • async bir fonksiyonu asenkron olarak işaretler; JavaScript'te her zaman bir promise döndürür.
  • await, bir promise sonuçlanana dek yalnızca mevcut fonksiyonu duraklatır, tüm programı değil.
  • Hatalar sıradan try/catch blokları ile yönetilebilir.
  • Birbirinden bağımsız işlemleri tek tek beklemek yerine paralel çalıştırmak için Promise.all kullanın.

Örnek

async/await ile veri yüklemekjavascript
// An async function can use await inside it
async function loadUser(id) {
  try {
    const response = await fetch(`https://api.example.com/users/${id}`);
    if (!response.ok) throw new Error("HTTP " + response.status);
    return await response.json(); // wait for the body to be parsed
  } catch (error) {
    console.error("Could not load user:", error);
  }
}

// Run two independent requests at the same time
const [first, second] = await Promise.all([loadUser(1), loadUser(2)]);

Sık sorulan sorular

await ana iş parçacığını (main thread) bloke eder mi?

Hayır. await yalnızca içinde bulunduğu async fonksiyonu duraklatır; tarayıcının kullanıcı arayüzü dahil programın geri kalanı çalışmaya devam eder. Fonksiyon, beklenen promise sonuçlandığında kaldığı yerden sürer.

await'i async fonksiyonun dışında kullanabilir miyim?

Modern JavaScript'te ES modüllerinde doğrudan üst düzey (top-level) await kullanabilirsiniz. Klasik betiklerde ve CommonJS dosyalarında await bir async fonksiyonun içinde olmalıdır.

async/await ile promise'lar arasındaki fark nedir?

Async/await, promise'ların üzerine kurulu bir sözdizimidir; onların yerine geçmez. Aynı promise tabanlı mantığı daha doğrusal ve okunaklı bir biçimde yazmanızı sağlar.

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar