JavaScript’te Gelişmiş Promise Desenleri
JavaScript’te Promise’ler, asenkron işlemleri yönetmenin en etkili yollarından biridir. Temel Promise kullanımını kavradıysanız, bu makalede gelişmiş teknikleri ve yaygın kullanım kalıplarını ele alacağız. Bu sayede, daha karmaşık asenkron senaryoları daha temiz ve okunabilir bir şekilde yönetebileceksiniz. Öncelikle, temel Promise bilgisinin olduğunu varsayarak ilerleyeceğiz. Ancak, temel bilgileri hatırlatmak adına, kısa bir özet verelim.
Promise Temelleri (Kısa Özet)
Bir Promise, henüz bilinmeyen bir değeri temsil eden bir nesnedir. Bu değer, gelecekte tamamlanacak veya başarısız olacak bir işlemin sonucudur. Bir Promise, üç temel durumda bulunabilir:
- Pending (Beklemede): İşlem henüz tamamlanmamıştır.
- Fulfilled (Tamamlandı): İşlem başarılı bir şekilde tamamlanmıştır.
- Rejected (Reddedildi): İşlem başarısız olmuştur.
Promise’ler, .then() ve .catch() metodları aracılığıyla değerlerine erişmemizi sağlar. .then(), işlem başarılı olduğunda çalışır, .catch() ise işlem başarısız olduğunda çalışır.
Gelişmiş Promise Desenleri
1. Promise.all(): Birden Fazla Promise’i Paralel Çalıştırmak
Birden fazla asenkron işlemi aynı anda çalıştırmanız gerekiyorsa, Promise.all() metodu ideal çözümdür. Bu metod, bir Promise dizisi alır ve tüm Promise’ler tamamlandığında veya birisi reddedildiğinde sonuç döndürür.
Promise.all([
fetch('url1'),
fetch('url2'),
fetch('url3')
])
.then(responses => {
// Tüm cevaplar burada
})
.catch(error => {
// Bir hata oluştu
});
2. Promise.race(): En Hızlı Promise’i Seçmek
Birkaç Promise’den yalnızca en hızlı tamamlananı ilgilendirmeniz gerekiyorsa, Promise.race() kullanabilirsiniz. İlk tamamlanan veya reddedilen Promise’in sonucunu döndürür.
Promise.race([
fetch('url1'),
fetch('url2')
])
.then(response => {
// En hızlı cevap burada
})
.catch(error => {
// Bir hata oluştu
});
3. Promise.resolve() ve Promise.reject(): Promise Oluşturma
Mevcut bir değeri Promise’e dönüştürmek veya yeni bir Promise oluşturmak için Promise.resolve() ve Promise.reject() kullanabilirsiniz. Promise.resolve() başarılı bir Promise oluştururken, Promise.reject() başarısız bir Promise oluşturur.
const resolvedPromise = Promise.resolve('Başarılı!');
const rejectedPromise = Promise.reject('Başarısız!');
4. Zincirleme (Chaining): Birden Fazla .then() Metodu Kullanımı
Birden fazla asenkron işlem gerçekleştiriyorsanız, Promise’leri zincirleme kullanarak temiz ve okunabilir kod yazabilirsiniz. Her .then() metodu, önceki .then() metodunun sonucunu alır ve yeni bir Promise döndürür.
fetch('url')
.then(response => response.json())
.then(data => {
// Verileri işleyin
})
.catch(error => {
// Hata yönetimi
});
5. Asenkron Fonksiyonlar (async/await): Daha Okunabilir Kod
Asenkron işlemleri yönetmek için async/await kullanımı, Promise’lerle çalışmayı daha okunabilir ve daha kolay hale getirir. async anahtar kelimesi ile bir fonksiyonu asenkron hale getirebilir ve await anahtar kelimesi ile bir Promise’in tamamlanmasını bekleyebilirsiniz.
async function fetchData() {
try {
const response = await fetch('url');
const data = await response.json();
// Verileri işleyin
} catch (error) {
// Hata yönetimi
}
}
Bu gelişmiş Promise desenlerini kullanarak, karmaşık asenkron işlemleri daha etkili ve temiz bir şekilde yönetebilirsiniz. Daha fazla bilgi için fatihsoysal.com adresini ziyaret edebilirsiniz. Ayrıca, konu hakkında daha fazla bilgi edinmek için MDN Web Docs belgelerine göz atabilirsiniz.
#Etiketler: JavaScript, Promise, Asenkron Programlama, Promise Desenleri, Promise.all, Promise.race, Promise.resolve, Promise.reject, async/await, JavaScript Örnekleri, Fatih Soysal
