Classe Promise en TypeScript
Cet article explique la classe Promise en TypeScript.
YouTube Video
Promise
La classe Promise
en TypeScript est fondamentalement la même que Promise
en JavaScript. Une Promise
est une classe intégrée pour gérer les opérations asynchrones, représentant le résultat d'une opération asynchrone lorsqu'elle est terminée. Ici, nous expliquons l'utilisation de base des Promises et les concepts associés.
Utilisation de base
Créer une Promise :
Un objet Promise
est utilisé pour encapsuler des opérations asynchrones. Une Promise
est créée avec new Promise(executor)
, et elle exécute des opérations asynchrones à l'intérieur. L’executor
prend deux fonctions, resolve
et reject
, comme arguments.
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});
Utiliser une Promise :
La Promise
créée est traitée à l'aide de then()
et 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});
Méthode 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});
- La méthode
finally()
définit un code qui sera toujours exécuté, que laPromise
soit résolue ou rejetée.
Chaîner les Promises :
En chaînant then()
après then()
, vous pouvez connecter plusieurs opérations asynchrones en série.
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:
En TypeScript, vous pouvez gérer les Promises plus simplement en utilisant async
/await
. Dans une fonction async
, vous pouvez utiliser le mot-clé await
pour attendre le résultat d'une Promise.
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();
Méthodes des Promises
Promise.all()
Promise.all
exécute plusieurs Promises simultanément et attend que toutes soient résolues.
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()
est appelé uniquement lorsque toutes lesPromises
sont résolues.catch()
est appelé si ne serait-ce qu'une seule échoue.
Promise.race()
Promise.race
renvoie le résultat de la première Promise
qui se termine parmi plusieurs Promises.
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});
- Comme dans cet exemple, le résultat de la première
Promise
qui se termine est renvoyé.
Promise.allSettled()
Promise.allSettled
attend que toutes les Promises soient terminées et renvoie un tableau de tous les résultats, qu'ils soient résolus ou rejetés.
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()
est appelé une fois que toutes lesPromises
sont terminées (qu'elles soient résolues ou rejetées). Chaque résultat inclut une propriétéstatus
('fulfilled'
ou'rejected'
). Les échecs n’affectent pas les autres opérations.
Promise.any()
Promise.any
attend que la première Promise soit résolue et la renvoie.
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 });
- Il renvoie la première valeur résolue parmi plusieurs
Promises
.
Résumé
En utilisant TypeScript, vous pouvez spécifier les types des Promises de manière appropriée, ce qui vous permet d'écrire des programmes plus sûrs au niveau des types. Cela aide à détecter les erreurs plus tôt pendant le développement en spécifiant à l'avance le type de valeur qu'une Promise retourne.
Vous pouvez suivre l'article ci-dessus avec Visual Studio Code sur notre chaîne YouTube. Veuillez également consulter la chaîne YouTube.