Explication de Javascript
Explication de Javascript
tâches de manière non bloquante. Cela signifie que le programme peut continuer à fonctionner
pendant que des opérations potentiellement longues (comme des requêtes réseau, des lectures de
fichiers, ou des timers) sont en cours d'exécution. Cela contraste avec la programmation synchrone,
où chaque opération doit être terminée avant que la suivante ne commence.
1. **Non-blocage** :
En programmation asynchrone, les opérations qui prennent du temps (comme les appels réseau ou
les accès à une base de données) ne bloquent pas l'exécution du reste du code. Au lieu de cela, ces
opérations sont lancées en arrière-plan, et le programme continue à exécuter d'autres tâches.
Les opérations asynchrones sont utiles pour gérer des tâches qui pourraient prendre un temps
indéterminé, comme :
- Les requêtes HTTP (exemple : récupérer des données depuis une API).
- **Callbacks** : Fonctions passées en argument à une autre fonction, appelées une fois l'opération
asynchrone terminée.
- **Promesses (Promises)** : Objets qui représentent une valeur future, avec des méthodes
comme `.then()` et `.catch()` pour gérer le succès ou l'échec.
- **Async/Await** : Syntaxe moderne qui permet d'écrire du code asynchrone de manière plus
lisible, comme s'il était synchrone.
2. **Réactivité** :
Dans une interface utilisateur, la programmation asynchrone permet de garder l'application
réactive pendant que des tâches longues s'exécutent en arrière-plan.
Au lieu d'attendre qu'une tâche se termine, le programme peut utiliser ce temps pour exécuter
d'autres tâches, ce qui optimise l'utilisation des ressources.
Exemples concrets**
```javascript
console.log("Début");
for (let i = 0; i < 1000000000; i++) {} // Boucle longue qui bloque l'exécution
console.log("Fin");
```
Dans cet exemple, le programme est bloqué pendant l'exécution de la boucle, et "Fin" ne s'affiche
qu'après la fin de la boucle.
```javascript
console.log("Début");
setTimeout(() => {
console.log("Fin");
```
Résultat :
```
Début
Fin
```
Ici, `setTimeout` lance une opération asynchrone, mais le programme continue à exécuter le code
suivant (`console.log("Fin")`) sans attendre que l'opération se termine.
#### 1. **Callbacks**
Un callback est une fonction passée en argument à une autre fonction, qui est appelée une fois
l'opération asynchrone terminée.
**Exemple :**
```javascript
function fetchData(callback) {
setTimeout(() => {
callback(data);
}, 1000);
fetchData((data) => {
});
Promesses (Promises)**
Une promesse représente une valeur future. Elle peut être résolue (succès) ou rejetée (échec).
**Exemple :**
```javascript
setTimeout(() => {
resolve("Succès !");
}, 1000);
});
promise
```
---
#### 3. **Async/Await**
`async/await` est une syntaxe moderne pour travailler avec des promesses. Une fonction `async`
retourne toujours une promesse, et `await` pause l'exécution jusqu'à ce que la promesse soit
résolue.
**Exemple :**
```javascript
try {
console.log(data);
} catch (error) {
fetchData();
```
---
| **Performance** | Peut être lent pour les tâches longues. | Optimisé pour les tâches
longues. |
| **Utilisation** | Simple, mais peu adapté aux tâches longues. | Idéal pour les tâches longues
ou réseau. |
---
### **Résumé**
- La **programmation asynchrone** permet d'exécuter des tâches sans bloquer l'exécution du reste
du programme.
- Elle est essentielle pour gérer des opérations longues (comme les requêtes réseau) tout en gardant
l'application réactive.
- En JavaScript, elle est implémentée via des **callbacks**, des **promesses** et la syntaxe
**async/await**.