TypeScript ve Promises ile Nasıl Çalışılır
TypeScript, statik türler ekleyerek JavaScript geliştirmeyi geliştirir. Eşzamansız kodla çalışırken, gelecekte tamamlanacak işlemleri işlemek için promise'ler kullanılır. TypeScript, promise'leri tür güvenliği ve netliğiyle yönetmek için araçlar sağlar. Bu kılavuz, temel kullanımdan gelişmiş senaryolara kadar TypeScript'te promise'lerle nasıl çalışılacağını inceler.
Sözleri Anlamak
promise, eşzamansız bir işlemin nihai tamamlanmasını veya başarısızlığını temsil eden bir nesnedir. İşlemin sonucunu veya hatasını işlemek için yöntemler sağlar. TypeScript'te, vaatler beklenen veri türüyle çözümlendiğinden emin olmak için yazılabilir.
Promise'lerin Temel Kullanımı
TypeScript'te promise'ler oluşturmak ve kullanmak basittir. İşte bir dizeyle çözülen bir promise örneği:
function fetchData(): Promise {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Data fetched successfully!");
}, 1000);
});
}
fetchData().then((data) => {
console.log(data); // Outputs: Data fetched successfully!
}).catch((error) => {
console.error("Error:", error);
});
Bu örnekte, fetchData bir dizeyle çözülen bir söz döndürür. then yöntemi çözülen değeri işlerken, catch herhangi bir hatayı işler.
Async/Await ile Promise'leri Yönetme
TypeScript, promise'lerle çalışmanın daha okunabilir bir yolunu sağlayan async/await sözdizimini destekler. İşte promise'lerle async/await'i kullanma yöntemi:
async function fetchDataAsync(): Promise {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Data fetched successfully!");
}, 1000);
});
}
async function processData() {
try {
const data = await fetchDataAsync();
console.log(data); // Outputs: Data fetched successfully!
} catch (error) {
console.error("Error:", error);
}
}
processData();
Bu örnekte, fetchDataAsync fonksiyonu async olarak tanımlanmıştır ve bu, sözün çözülmesini beklemek için await anahtar kelimesini kullanmasına olanak tanır. Hatalar try/catch bloğu kullanılarak yakalanır.
Jeneriklerle Promise Yazımı
TypeScript, bir promise'in jenerikleri kullanarak çözdüğü veri türünü belirtmeye izin verir. Bu, türlerin kod boyunca doğru şekilde yönetilmesini sağlar. İşte türlendirilmiş bir promise'in bir örneği:
interface User {
id: number;
name: string;
}
function fetchUser(): Promise {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({ id: 1, name: "John Doe" });
}, 1000);
});
}
fetchUser().then((user) => {
console.log(user.id, user.name); // Outputs: 1 John Doe
}).catch((error) => {
console.error("Error:", error);
});
Bu örnekte, fetchUser, User nesnesiyle çözümlenen bir söz döndürür. Tür, tür güvenliğini sağlayarak jenerikler kullanılarak belirtilir.
API Çağrılarıyla TypeScript'te Promises Kullanımı
Sözler genellikle eş zamanlı olmayan veri alımını yönetmek için API çağrılarıyla birlikte kullanılır. TypeScript'in tür sistemi API'lerden gelen yanıtları yönetmeye yardımcı olur:
async function getUserData(userId: number): Promise {
const response = await fetch(`https://api.example.com/users/${userId}`);
if (!response.ok) {
throw new Error("Network response was not ok.");
}
const data: User = await response.json();
return data;
}
getUserData(1).then((user) => {
console.log(user);
}).catch((error) => {
console.error("Error:", error);
});
Bu örnek, bir API çağrısı yapmak ve yanıtı promises ve async/await kullanarak işlemek için fetch'nın nasıl kullanılacağını gösterir. Yanıt, tür güvenliğini sağlayarak User olarak yazılır.
Çözüm
TypeScript'te promise'lerle çalışmak, asenkron işlemler için gelişmiş tür güvenliği ve netlik sağlar. Geliştiriciler, TypeScript'in yazım sistemini, async/await sözdizimini ve jenerikleri kullanarak promise'leri etkili bir şekilde yönetebilir ve daha güvenilir uygulamalar oluşturabilir.