JavaScript, per sua natura, è un linguaggio "single-threaded", cioè può fare una sola cosa alla volta. Ma come fa allora a gestire operazioni lente, come una chiamata a un'API, senza bloccare l'intera interfaccia utente? La risposta è nel suo modello asincrono.
Il Problema: Le Operazioni Lente
Immagina di dover scaricare un'immagine da un server. Se il codice si bloccasse in attesa del download, l'intera pagina web si "congelerebbe". Il codice asincrono permette di dire: "Ehi, inizia a scaricare questa immagine, e quando hai finito, esegui questa funzione".
1. Le Callback (Il Vecchio Modo)
In passato, si usavano le "callback", cioè funzioni passate come argomento ad altre funzioni. Questo però portava a un codice difficile da leggere e mantenere, noto come "Callback Hell" o "Pyramid of Doom", con tante funzioni annidate una dentro l'altra.
2. Le Promises (Un Approccio Migliore)
Le Promises (promesse) sono state introdotte per risolvere questo problema. Una Promise è un oggetto che rappresenta il completamento (o il fallimento) di un'operazione asincrona. Invece di annidare le callback, si possono "incatenare" le operazioni con i metodi `.then()` (per il successo) e `.catch()` (per l'errore), rendendo il codice molto più lineare e leggibile.
fetch('url')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
3. Async/Await (Il Modo Moderno)
Async/Await è una "zucchero sintattico" costruito sopra le Promises, che rende il codice asincrono ancora più pulito e facile da leggere, facendolo sembrare quasi sincrono.
- La parola chiave `async` si mette prima di una funzione per dichiarare che conterrà operazioni asincrone.
- La parola chiave `await` si mette prima di una funzione che restituisce una Promise. "Mette in pausa" l'esecuzione della funzione `async` finché la Promise non è risolta, senza però bloccare il resto del programma.
async function fetchData() {
try {
const response = await fetch('url');
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
}
Oggi, Async/Await è lo standard de facto per scrivere codice asincrono in JavaScript in modo pulito e professionale.
Hai bisogno di una soluzione su misura?
Dalla Web App al gestionale custom, trasformiamo le tue idee in software performante. Contattaci per una consulenza gratuita.
Richiedi una consulenza