TypeScript'teki Promise Sınıfı

TypeScript'teki Promise Sınıfı

Bu makale, TypeScript'teki Promise sınıfını açıklar.

YouTube Video

Promise

TypeScript'teki Promise sınıfı, temel olarak JavaScript'teki Promise ile aynıdır. Promise, asenkron işlemleri yönetmek için yerleşik bir sınıf olup, bir asenkron işlemin tamamlandığında sonuçlarını temsil eder. Burada, Promiselerin temel kullanımını ve ilgili kavramları açıklıyoruz.

Temel Kullanım

Promise Oluşturma:

Promise nesnesi, asenkron işlemleri sarmalamak için kullanılır. Promise, new Promise(executor) ile oluşturulur ve içerisinde asenkron işlemleri yürütür. executor, argüman olarak iki fonksiyon alır: resolve ve reject.

1const myPromise = new Promise<number>((resolve, reject) => {
2    // Perform asynchronous operations
3    const success = true; // This is just an example
4    if (success) {
5        resolve(42); // In case of success
6    } else {
7        reject('Failed'); // In case of failure
8    }
9});

Promise Kullanımı:

Oluşturulan Promise, then() ve catch() kullanılarak işlenir.

1myPromise.then((value) => {
2    console.log(`Success: ${value}`); // Process the value passed with resolve
3}).catch((error) => {
4    console.error(`Error: ${error}`); // Handle the error passed with reject
5});

finally() yöntemi

 1const myPromise = new Promise<number>((resolve, reject) => {
 2    // Perform asynchronous operations
 3    const success = false; // This is just an example
 4    if (success) {
 5        resolve(42); // In case of success
 6    } else {
 7        reject('Failed'); // In case of failure
 8    }
 9});
10
11myPromise.then((value) => {
12    console.log(`Success: ${value}`); // Process the value passed with resolve
13}).catch((error) => {
14    console.error(`Error: ${error}`); // Handle the error passed with reject
15}).finally(() => {
16    console.log('The operation has completed');
17});
  • finally() yöntemi, Promise'in yerine getirilip getirilmediğine bakılmaksızın her zaman çalıştırılacak kodu tanımlar.

Promise Zincirleme:

then() ardından başka bir then() bağlayarak, birden fazla asenkron işlemi sırayla bağlayabilirsiniz.

 1const myPromise = new Promise<number>((resolve, reject) => {
 2    // Perform asynchronous operations
 3    const success = true; // This is just an example
 4    if (success) {
 5        resolve(42); // In case of success
 6    } else {
 7        reject('Failed'); // In case of failure
 8    }
 9});
10
11myPromise
12    .then((value) => {
13        console.log(`Success: ${value}`);
14        return value + 1; // Pass the value to the next then
15    })
16    .then((newValue) => {
17        console.log(`New value: ${newValue}`);
18    })
19    .catch((error) => {
20        console.error(`Error: ${error}`);
21    });

async/await:

TypeScript'te async/await kullanarak Promiseleri daha doğrudan yönetebilirsiniz. async bir fonksiyon içinde, bir Promise'nin sonucunu beklemek için await anahtar kelimesini kullanabilirsiniz.

 1const myPromise = new Promise<number>((resolve, reject) => {
 2    // Perform asynchronous operations
 3    const success = true; // This is just an example
 4    if (success) {
 5        resolve(42); // In case of success
 6    } else {
 7        reject('Failed'); // In case of failure
 8    }
 9});
10
11async function asyncFunction() {
12    try {
13        const value = await myPromise;
14        console.log(`Success: ${value}`);
15    } catch (error) {
16        console.error(`Error: ${error}`);
17    }
18}
19
20asyncFunction();

Promise Metodları

Promise.all()

Promise.all, birden fazla Promise'i eşzamanlı olarak çalıştırır ve hepsinin yerine getirilmesini bekler.

 1const promise1 = Promise.resolve(1);
 2const promise2 = Promise.resolve(2);
 3const promise3 = Promise.resolve(3);
 4
 5Promise.all([promise1, promise2, promise3])
 6    .then((results) => {
 7        console.log(results);  // [1, 2, 3]
 8    })
 9    .catch((error) => {
10        console.error('Error :', error);
11    });
  • then() yalnızca tüm Promise'ler yerine getirildiğinde çağrılır. Herhangi biri başarısız olursa catch() çağrılır.

Promise.race()

Promise.race, birden fazla Promise arasında ilk tamamlanan Promise'in sonucunu döndürür.

1const promise1 = new Promise((resolve) => setTimeout(resolve, 100, 'First'));
2const promise2 = new Promise((resolve) => setTimeout(resolve, 500, 'Second'));
3
4Promise.race([promise1, promise2]).then((result) => {
5    console.log(result);  // "First"
6});
  • Bu örnekte olduğu gibi, ilk tamamlanan Promise'in sonucu döndürülür.

Promise.allSettled()

Promise.allSettled, tüm Promise'lerin tamamlanmasını bekler ve hem yerine getirilmiş hem de reddedilmiş sonuçları içeren bir dizi döndürür.

 1const promise1 = Promise.resolve(1);
 2const promise2 = Promise.reject("Failed");
 3const promise3 = Promise.resolve(3);
 4
 5Promise.allSettled([promise1, promise2, promise3])
 6    .then((results) => {
 7        results.forEach(result => console.log(result));
 8        // [
 9        //   { status: 'fulfilled', value: 1 },
10        //   { status: 'rejected', reason: 'Failed' },
11        //   { status: 'fulfilled', value: 3 }
12        // ]
13    });
  • Tüm Promise'ler tamamlandığında (fulfilled ya da rejected), then() çağrılır. Her sonuç, bir status özelliği içerir ('fulfilled' veya 'rejected'). Başarısızlıklar diğer işlemleri etkilemez.

Promise.any()

Promise.any, ilk Promise yerine getirilene kadar bekler ve onu döndürür.

 1const promise1 = new Promise((resolve) => setTimeout(() => resolve("A ok"), 300));
 2const promise2 = new Promise((_, reject) => setTimeout(() => reject("B fail"), 100));
 3const promise3 = new Promise((resolve) => setTimeout(() => resolve("C ok"), 200));
 4
 5Promise.any([promise1, promise2, promise3])
 6    .then(value => {
 7        // Logs the first fulfilled value ("C ok")
 8        console.log("first fulfilled:", value);
 9    })
10    .catch(err => {
11        console.log("should not reach here in this example:", err);
12    });
  • Birden fazla Promise arasında ilk yerine getirilen değeri döndürür.

Özet

TypeScript kullanarak Promiselerin türlerini doğru şekilde belirleyebilir ve daha tür-güvenli programlar yazabilirsiniz. Bu, bir Promise'nin döndüreceği değerin türünü önceden belirleyerek geliştirme sırasında hataları erken fark etmenize yardımcı olur.

Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.

YouTube Video