JavaScript Asincrono: Dalle Callback alle Promises e Async/Await

Javascript

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