Async/Await
- Okunuşu
- eysink ıveyt
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
Önemli noktalar
asyncbir 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/catchblokları ile yönetilebilir. - Birbirinden bağımsız işlemleri tek tek beklemek yerine paralel çalıştırmak için
Promise.allkullanın.
Örnek
// 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
- PromiseProgramlamanın Temelleri, s. 46Promise, asenkron bir işlemin nihai sonucunu temsil eden bir nesnedir; iş bittiğinde kodun başarıya ya da hataya tepki vermesini sağlar.
- CallbackProgramlamanın Temelleri, s. 5Callback, başka bir fonksiyona argüman olarak verilen ve o fonksiyonun bir iş bittiğinde ya da bir olay gerçekleştiğinde sonradan çağırdığı fonksiyondur.
- EşzamanlılıkProgramlamanın Temelleri, s. 19Eşzamanlılık, bir programın birden çok görevde örtüşen zaman dilimlerinde ilerleyebilme yeteneğidir; örneğin birçok kullanıcıya aynı anda hizmet vermek gibi.
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin