4.1 Mot-clé async
Les fonctions asynchrones en JavaScript te permettent d'écrire du code asynchrone qui ressemble et se lit comme du code synchrone.
Les mots-clés async
et await
, introduits dans ECMAScript 2017 (ES8), facilitent le travail avec les promesses
et rendent le code plus clair et gérable.
Concepts de base
Le mot-clé async
devant la déclaration d'une fonction indique que la fonction est asynchrone. Une fonction asynchrone
retourne toujours une promesse, même si elle n'utilise pas explicitement l'opérateur return
.
Si une fonction retourne une valeur, elle est automatiquement encapsulée dans une promesse contenant cette valeur.
Syntaxe :
async function nom() {
// code de la fonction
}
Exemple :
async function greet() {
return 'Hello, world!';
}
greet().then((message) => {
console.log(message); // Affichera : Hello, world!
});
4.2 Mot-clé await
Le mot-clé await
est utilisé à l'intérieur d'une fonction asynchrone pour suspendre son exécution jusqu'à ce que la promesse
se réalise. await
peut être utilisé uniquement à l'intérieur de fonctions déclarées avec le mot-clé async
.
Syntaxe :
let result = await
promise;
Exemple :
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function greet() {
await delay(2000);
return 'Hello, world!';
}
async function displayGreeting() {
const message = await greet();
console.log(message); // Affichera : Hello, world! après 2 secondes
}
displayGreeting();
4.3 Exemples d'utilisation de async et await
Exemple 1 : Fonction asynchrone avec plusieurs promesses
function fetchData1() {
return new Promise((resolve) => setTimeout(() => resolve('Data 1'), 1000));
}
function fetchData2() {
return new Promise((resolve) => setTimeout(() => resolve('Data 2'), 2000));
}
async function fetchAllData() {
const data1 = await fetchData1();
console.log(data1); // Affichera : Data 1 après 1 seconde
const data2 = await fetchData2();
console.log(data2); // Affichera : Data 2 après 2 secondes
}
fetchAllData();
Exemple 2 : Exécution parallèle des opérations asynchrones
Pour exécuter plusieurs opérations asynchrones en parallèle, tu peux utiliser Promise.all()
avec await
.
function fetchData1() {
return new Promise((resolve) => setTimeout(() => resolve('Data 1'), 1000));
}
function fetchData2() {
return new Promise((resolve) => setTimeout(() => resolve('Data 2'), 2000));
}
async function fetchAllData() {
const [data1, data2] = await Promise.all([fetchData1(), fetchData2()]);
console.log(data1); // Affichera : Data 1 après 2 secondes
console.log(data2); // Affichera : Data 2 après 2 secondes
}
fetchAllData();
Exemple 3 : Gestion des erreurs avec try...catch
Les fonctions asynchrones permettent d'utiliser des blocs try...catch
pour gérer les erreurs, ce qui rend le code plus lisible et gérable.
function fetchDataWithError() {
return new Promise((resolve, reject) => setTimeout(() => reject('Une erreur est survenue'), 1000));
}
async function fetchData() {
try {
const data = await fetchDataWithError();
console.log(data);
} catch (error) {
console.error('Erreur :', error); // Affichera : Erreur : Une erreur est survenue après 1 seconde
}
}
fetchData();
Exemple 4 : Utilisation de async et await dans les méthodes de classe
Les fonctions asynchrones peuvent également être utilisées dans les méthodes de classe.
class DataFetcher {
async fetchData() {
const data = await new Promise((resolve) => setTimeout(() => resolve('Données récupérées'), 1000));
return data;
}
}
const fetcher = new DataFetcher();
fetcher.fetchData().then((data) => {
console.log(data); // Affichera : Données récupérées après 1 seconde
});
Exemple 5 : Itérateurs asynchrones
Les itérateurs asynchrones permettent de travailler avec des flux de données qui arrivent de manière asynchrone.
async function* asyncGenerator() {
let i = 0;
while (i < 3) {
await new Promise((resolve) => setTimeout(resolve, 1000));
yield i++;
}
}
async function iterateAsyncGenerator() {
for await (let value of asyncGenerator()) {
console.log(value); // Affichera 0, 1 et 2 avec un intervalle de 1 seconde
}
}
iterateAsyncGenerator();
GO TO FULL VERSION