فئة الوعد في TypeScript

فئة الوعد في TypeScript

توضح هذه المقالة فئة الوعد في TypeScript۔

YouTube Video

الوعد

فئة Promise في TypeScript تشبه بشكل أساسي الفئة Promise في JavaScript۔ Promise هي فئة مدمجة للتعامل مع العمليات غير المتزامنة، وتمثل نتيجة العملية غير المتزامنة عند اكتمالها۔ هنا نوضح الاستخدام الأساسي للوعد والمفاهيم ذات الصلة۔

الاستخدام الأساسي

إنشاء وعد:

يتم استخدام كائن Promise لتغليف العمليات غير المتزامنة۔ يتم إنشاء Promise باستخدام new Promise(executor)، ويتم تنفيذ العمليات غير المتزامنة داخله۔ تأخذ الدالة executor وظيفتين كوسيطتين، هما resolve و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 الذي تم إنشاؤه باستخدام then() و catch()۔

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()

 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() كودًا سيتم تنفيذه دائمًا بغض النظر عما إذا تم الوفاء بالـ Promise أو تم رفضه۔

تسلسل الوعود:

من خلال تسلسل then() بعد then()، يمكنك ربط عدة عمليات غير متزامنة بشكل متسلسل۔

 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، يمكنك التعامل مع الوعود بشكل أكثر وضوحًا باستخدام async/await۔ داخل وظيفة async، يمكنك استخدام الكلمة المفتاحية await للانتظار حتى الحصول على نتيجة الوعد۔

 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.all()

تقوم Promise.all بتنفيذ عدة وعود في وقت واحد وتنتظر حتى يتم الوفاء بها جميعًا۔

 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() فقط عندما يتم الوفاء بجميع الـ Promises۔ يتم استدعاء catch() إذا فشل حتى واحد منها۔

Promise.race()

تعيد Promise.race نتيجة أول وعد يكتمل بين عدة وعود۔

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});
  • كما في هذا المثال، يتم إرجاع نتيجة أول وعد يكتمل۔

Promise.allSettled()

Promise.allSettled تنتظر حتى تنتهي جميع الوعود وتعيد مصفوفة بجميع النتائج، سواء كانت مُنفذة أو مرفوضة۔

 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    });
  • يتم استدعاء then() بمجرد انتهاء جميع الـ Promises (سواء تم الوفاء بها أو رفضها)۔ كل نتيجة تتضمن خاصية status ('fulfilled' أو 'rejected')۔ الإخفاقات لا تؤثر على العمليات الأخرى۔

Promise.any()

Promise.any تنتظر حتى يتم تنفيذ أول وعد وتعيده۔

 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    });
  • تعيد أول قيمة مُنفذة بين عدة وعود۔

الملخص

باستخدام TypeScript، يمكنك تحديد أنواع الوعود بشكل مناسب، مما يتيح لك كتابة برامج أكثر أمانًا من حيث الأنواع۔ يساعد ذلك في اكتشاف الأخطاء مبكرًا أثناء التطوير عن طريق تحديد نوع القيمة التي يعيدها الوعد مقدمًا۔

يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔

YouTube Video