TypeScript'te Async/await
Bu makale, TypeScript'te async/await'i açıklar.
YouTube Video
TypeScript'te Async/await
TypeScript'te async
, asenkron işlemleri kısa yoldan tanımlamak için kullanılan bir anahtar kelimedir ve JavaScript'in async
/await
sözdizimiyle benzer şekilde çalışır. Async
fonksiyonları, Promise döndüren fonksiyonların kullanımını daha sezgisel hale getirmek için tasarlanmıştır.
Async
Fonksiyonların Temelleri
Async
anahtar kelimesiyle tanımlanan fonksiyonlar her zaman bir Promise
döner. İşte temel bir örnek:.
1async function fetchData(): Promise<string> {
2 return "Data received";
3}
4
5fetchData().then((data) => console.log(data)); // "Data received"
Bu örnekte, async
fonksiyon her zaman bir Promise
döndürdüğü için dönen değer, otomatik olarak Promise.resolve
kullanılarak çözümlenir. Başka bir deyişle, "Data received"
bir Promise<string>
haline gelir ve asenkron bir işlem olarak ele alınır.
Await
Anahtar Kelimesi
Await
anahtar kelimesi yalnızca bir async
fonksiyon içinde kullanılabilir. Bu, fonksiyon yürütülmesine devam etmeden önce bir Promise
'in sonucunu beklemek ve duraklatma yeteneği sağlar.
Aşağıdaki örnekte, fetch
kullanılarak yapılan asenkron işlem async
/await
ile yazılmıştır.
1async function getUserData() {
2 try {
3 const response = await fetch("https://codesparklab.com/json/example.json");
4 const data = await response.json();
5 console.log(data);
6 } catch (error) {
7 console.error("Error fetching user data:", error);
8 }
9}
10
11getUserData();
Bu örnekte, await
kullanılarak fetch
fonksiyonunun döndürdüğü Promise
'in tamamlanması beklenir ve sonucu response
değişkenine atanır. Ayrıca, response.json()
sonucunun beklenmesi de sağlanır.
Async
/Await
ile Hata Yönetimi
Asenkron işlem sırasında meydana gelen hatalar, standart try...catch
sözdizimi kullanılarak yakalanabilir. Await
kısmında bir hata oluşursa, bu hata catch
bloğunda ele alınır.
1async function fetchDataWithErrorHandling() {
2 try {
3 const response = await fetch('https://invalid.codesparklab.com/');
4 if (!response.ok) {
5 throw new Error(`HTTP error! status: ${response.status}`);
6 }
7 const data = await response.json();
8 console.log(data);
9 } catch (error) {
10 console.error("Fetch error:", error);
11 }
12}
13
14fetchDataWithErrorHandling();
Yukarıdaki örnekte, fetch
fonksiyonunun sonucu await
kullanılarak beklenir ve bir hata oluşursa try...catch
ile ele alınır.
Async
/Await
Avantajları
-
Sezgisel asenkron işlem:
Async
/await
kullanarak kod akışı,Promise
zincirlerini (then
veyacatch
) kullanmaya kıyasla daha sezgisel hale gelir ve senkron işlem gibi yazılabilir. -
Kolay hata yönetimi:
Try...catch
kullanmak, asenkron işlemlerde hata yönetimini basitleştirir.Promise
zincirleri kullanmaktan daha okunabilir kod yazabilirsiniz.
Async
Fonksiyonların Dönen Değerleri
async
fonksiyonu her zaman bir Promise
döndürür. Bu nedenle, açıkça bir Promise
döndürmeden de, async
anahtar kelimesi kullanılarak asenkron işlem yapılabilir.
1async function example() {
2 return 42;
3}
4
5example().then((result) => console.log(result)); // 42
Yukarıdaki kodda, senkron bir değer olan 42
döndürülmektedir, ancak async
fonksiyonunun içinde olduğu için otomatik olarak Promise.resolve(42)
'ye dönüştürülür.
Asenkron Fonksiyonların Sıralı Çalıştırılması
Birden fazla asenkron fonksiyonu ardışık olarak çalıştırırken, sıralamalarını kontrol etmek için await
kullanılabilir.
1async function fetchData(url: string): Promise<any> {
2 try {
3 const response = await fetch(url);
4 return await response.json();
5 } catch (error) {
6 console.error("Error fetching user data:", error);
7 }
8}
9
10async function fetchData1(): Promise<any> {
11 return await fetchData("https://codesparklab.com/json/example.json");
12}
13
14async function fetchData2(): Promise<any> {
15 return await fetchData("https://codesparklab.com/json/example2.json");
16}
17
18async function processData() {
19 const data1 = await fetchData1();
20 console.log(data1);
21
22 const data2 = await fetchData2();
23 console.log(data2);
24}
25
26processData();
Bu örnekte, fetchData2
, fetchData1
tamamlandıktan sonra çalıştırılır. Bu, bir Promise
zinciri kullanmaya kıyasla daha okunaklıdır.
Paralel Çalıştırma
Asenkron işlemleri paralel olarak çalıştırmak isterseniz, birden fazla Promise
'i aynı anda işlemek için Promise.all
kullanabilirsiniz.
1async function fetchData(url: string): Promise<any> {
2 try {
3 const response = await fetch(url);
4 return await response.json();
5 } catch (error) {
6 console.error("Error fetching user data:", error);
7 }
8}
9
10async function fetchData1(): Promise<any> {
11 return await fetchData("https://codesparklab.com/json/example.json");
12}
13
14async function fetchData2(): Promise<any> {
15 return await fetchData("https://codesparklab.com/json/example2.json");
16}
17
18async function fetchMultipleData() {
19 const [data1, data2] = await Promise.all([fetchData1(), fetchData2()]);
20 console.log(data1);
21 console.log(data2);
22}
23
24fetchMultipleData();
Bu durumda, fetchData1
ve fetchData2
aynı anda çalıştırılır ve ikisi de çözümlendikten sonra işleme devam edilir. Bu, birden fazla asenkron işlemin verimli şekilde işlenmesini sağlar.
Özet
async
fonksiyonu birPromise
döndürür veawait
anahtar kelimesini kullanarak bir asenkron işlemin sonucunu bekleyebilirsiniz.try...catch
kullanarak, asenkron işlemlerde hata ayıklama daha basit hale gelir.Promise.all
kullanarak, birden fazla asenkron işlemi paralel olarak çalıştırmak mümkündür.
async
/await
, asenkron işlemlerin daha basit şekilde açıklanmasını sağladığı için TypeScript ve JavaScript'te yaygın olarak kullanılır.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.