1. Callback Hell: Derinliklere Dalmadan Önce Çözüm Yöntemini Bilin
Düşünün, bir gün bir API'ye istek göndermeniz gerekti ve her şey harika gitti. Fakat işler karmaşıklaştı ve kodunuzda ne kadar çok "callback" varsa, o kadar çok sorun yaşadınız. İşte bu noktada Callback Hell adı verilen, iç içe geçmiş `callback` fonksiyonlarıyla karşılaşırsınız. Peki, bunu nasıl önlersiniz?
```javascript
setTimeout(function() {
console.log("Başlangıç");
setTimeout(function() {
console.log("Ara");
setTimeout(function() {
console.log("Sonuç");
}, 1000);
}, 1000);
}, 1000);
```
Bu tür karmaşık yapılar yerine Promise veya async/await kullanarak kodunuzu daha okunabilir hale getirebilirsiniz. Bu yaklaşım, kodunuzun bakılabilirliğini artırır ve hataların önüne geçer.
2. Promise Kullanımında Yapılan Yaygın Hatalar
`Promise` kullanmak, asenkron JavaScript kodlarını daha düzenli hale getirse de, bazı hatalar hala yapılabiliyor. En yaygın hatalardan biri, `Promise`'ın hatalı kullanımıdır. Bir `Promise` dönerken, genellikle yanlış bir şekilde `then()` veya `catch()` blokları kullanılır. Bu da hataların görmemenize veya düzgün bir şekilde işlem yapmamanıza neden olur.
Doğru kullanım örneği:
```javascript
fetch('https://jsonplaceholder.typicode.com/posts')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.log('Hata:', error));
```
Bu örnekte, API'den gelen veriyi doğru şekilde alıp işliyoruz. Eğer `catch()` kullanmazsanız ve bir hata meydana gelirse, programınız düzgün bir şekilde çalışmayabilir. Bu sebeple, her zaman `catch()` ile hata yönetimini ihmal etmeyin.
3. Async/Await ile İlgili Yanlışlıklar
`async/await`, asenkron kod yazmayı adeta bir yürüyüşe dönüştürür. Ancak bazı geliştiriciler, bu yapıyı kullanırken yine yanlış adımlar atabiliyor. En büyük yanlışlık, `await`'in sadece bir `Promise` içinde kullanılabileceğini unutmaktır.
Yanlış kullanım örneği:
```javascript
async function getData() {
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const data = await response.json();
console.log(data);
}
```
Burada doğru kullanım gösterilmiş olsa da, `await`'i yanlış bir şekilde yazmaya kalksanız, hata alırsınız. Aslında `await` bir `Promise`'ı bekler, ama ona bir `Promise` değil, sıradan bir değeri verirseniz hata alırsınız.
4. Hata Yönetimi ve En İyi Uygulamalar
Asenkron programlama yaparken hata yönetimini göz ardı etmek, büyük bir hatadır. `try/catch` yapısını kullanarak asenkron kodlarda hata yönetimini düzgün yapabilirsiniz. Ayrıca, her hatanın üstesinden gelmeye çalışmak yerine, belirli hataları belirleyip onlara özel çözümler üretebilirsiniz.
Doğru kullanım örneği:
```javascript
async function getData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
if (!response.ok) {
throw new Error('Veri alınamadı!');
}
const data = await response.json();
console.log(data);
} catch (error) {
console.log('Hata:', error.message);
}
}
```
Bu şekilde, hem hataları doğru bir şekilde yönetirsiniz hem de kodunuzun güvenilirliğini artırırsınız.
5. Asenkron Kodun Test Edilmesi ve İyileştirilmesi
Asenkron kodların test edilmesi, genellikle senkron koda kıyasla biraz daha karmaşıktır. Ancak doğru tekniklerle bu karmaşıklık aşılabilir. Örneğin, Jest gibi test araçlarıyla `Promise` ve `async/await` fonksiyonlarınızı rahatça test edebilirsiniz.
Test örneği:
```javascript
test('Veri doğru şekilde alınmalı', async () => {
const data = await getData();
expect(data).toBeDefined();
expect(Array.isArray(data)).toBe(true);
});
```
Bu test, API'den dönen verinin doğru bir şekilde alındığını ve bir dizi (array) olduğunu kontrol eder. Test yazmak, kodunuzun sağlıklı çalışıp çalışmadığını anlamanıza yardımcı olur.
Sonuç
Asenkron JavaScript, modern web uygulamalarının vazgeçilmez bir parçasıdır. Ancak doğru kullanılmadığı takdirde karmaşık hatalarla karşılaşabilirsiniz. Bu yazımızda, asenkron kod yazarken en sık yapılan 5 hatayı ve bunların çözümlerini ele aldık. Eğer siz de bu hataları önlemek istiyorsanız, doğru teknikleri ve en iyi uygulamaları öğrenmek büyük bir fark yaratacaktır. Unutmayın, her hata bir öğrenme fırsatıdır.