Promise’ler, modern JavaScript’te asenkron işlemleri yönetmek için sıklıkla kullanılan güçlü bir yapıdır. Bu yazıda, Promise’lerin temellerini, kullanım şekillerini ve sıkça karşılaşılan bazı örnekleri anlatacağım.
Promise Nedir?
Bir Promise, bir değerin şu anda mevcut olmadığı, ama gelecekte mevcut olabileceği durumları modellemek için kullanılır. Temel olarak, bir Promise üç durumdan birinde olabilir:
- Pending (Beklemede): Sonuç henüz mevcut değil.
- Fulfilled (Gerçekleşti): Operasyon başarılı oldu.
- Rejected (Reddedildi): Bir hata meydana geldi.
Örnek :
1 2 3 4 5 6 7 8 9 |
let promise = new Promise((resolve, reject) => { setTimeout(() => { resolve('Veri alındı'); }, 2000); }); promise.then(result => console.log(result)); // Veri alındı |
Promise Kullanmanın Avantajları
- Callback hell’den (yoğun iç içe callbackler) kaçınmayı sağlar.
- Daha okunabilir ve yönetilebilir asenkron kod yazmanıza olanak tanır.
.then(), .catch() ve .finally() Kullanımı
.then(): Promise başarılı bir şekilde sonuçlandığında çalıştırılır.
.catch(): Hata durumunda çalıştırılır.
.finally(): Başarılı ya da hatalı sonuçlanmasından bağımsız olarak her zaman çalıştırılır.
Örnek :
1 2 3 4 5 6 |
promise .then(result => console.log(result)) .catch(error => console.error('Hata:', error)) .finally(() => console.log('Promise tamamlandı.')); |
Zincirleme
Promise’ler, zincirleme yaparak birden fazla asenkron işlemi sırayla gerçekleştirmeye olanak tanır.
Örnek :
1 2 3 4 5 6 |
fetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Hata:', error)); |
Hata Yönetimi
Birden fazla .then() kullanılıyorsa ve bir hata oluşursa, ilk yakalanan .catch() bloğu çalıştırılır.
Örnek :
1 2 3 4 5 6 7 8 9 |
promise1 .then(result => { throw new Error('Hata!'); return result; }) .then(result => console.log('Bu çalıştırılmaz.')) .catch(error => console.error(error.message)); |
Promise.all()
Birden fazla Promise’in tamamlanmasını beklemek için Promise.all() kullanılır.
Örnek :
1 2 3 4 5 6 7 8 9 |
let promise1 = fetch('https://api.example.com/data1').then(response => response.json()); let promise2 = fetch('https://api.example.com/data2').then(response => response.json()); Promise.all([promise1, promise2]) .then(results => console.log(results)) .catch(error => console.error(error)); |
Promise.race()
Verilen Promise’lerden ilk tamamlananının sonucunu ya da hatasını döndürür.
Örnek :
1 2 3 4 5 6 7 |
let promiseFast = new Promise(resolve => setTimeout(() => resolve('Hızlı!'), 1000)); let promiseSlow = new Promise(resolve => setTimeout(() => resolve('Yavaş.'), 5000)); Promise.race([promiseFast, promiseSlow]).then(result => console.log(result)); // "Hızlı!" |
Promise.allSettled()
Tüm Promise’lerin sonuçlanmasını bekler ve her birinin durumuna bağlı olarak bir sonuç ya da hata döndürür.
Örnek :
1 2 3 4 5 6 7 |
let promiseSuccess = fetch('https://api.example.com/data1').then(response => response.json()); let promiseFail = fetch('invalid-url').then(response => response.json()); Promise.allSettled([promiseSuccess, promiseFail]).then(results => console.log(results)); |
Kendi Promise’lerimizi Oluşturma
Bazen kendi Promise’lerimizi oluşturmamız gerekebilir.
Örnek :
1 2 3 4 5 6 7 |
function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } delay(3000).then(() => console.log('3 saniye bekledi!')); // 3 saniye bekledi! |
Sonuç olarak promise’ler, JavaScript’te asenkron işlemleri daha yönetilebilir hale getirir. Bu yazıda, temel kullanımından daha ileri konulara kadar Promise’lerle ilgili bilgileri kapsamlı bir şekilde ele aldık. Promises ile çalışırken pratik yapmak, bu konsepti daha iyi anlamak için çok önemlidir.
Umarım “JavaScript’te Promise Kullanımı” başlıklı yazım sizin için faydalı olmuştur.
Şu yazılar da ilginizi çekebilir.
JavaScript’te Destructuring Kullanımı
Yeni bir yazımda görüşmek üzere.
Happy coding!