Ritardi e operazioni asincrone rappresentano spesso una sfida nello sviluppo software, soprattutto quando si tratta di gestire i callback. Ecco dove entrano in gioco i Promises – un concetto potente che ti aiuta a mantenere chiare le tue strutture di codice e a ridurre la complessità delle operazioni asincrone.
Con questo tutorial, ti immergerai nel mondo dei Promises. Vedrai come funzionano e come si integrano con l'API Fetch in JavaScript per effettuare richieste HTTP e elaborare le risposte in modo significativo. Esploriamo insieme i vantaggi e i concetti fondamentali dei Promises.
Principali conclusioni
- I Promises servono a gestire operazioni asincrone e a fornire i loro risultati in una struttura chiara.
- L'API Fetch è un metodo moderno per effettuare richieste HTTP che supporta nativamente i Promises.
- Con i metodi then() e catch() puoi lavorare con i risultati e gli errori dei Promises, senza scivolare in un inferno di callback.
Guida passo-passo
Passo 1: Introduzione all'API Fetch
L'API Fetch offre un modo semplice per effettuare richieste HTTP. È disponibile nella quasi totalità dei browser moderni e utilizza i Promises per restituire la risposta alla richiesta. Inizi con la chiamata alla funzione fetch().
Ecco un esempio di come puoi effettuare una semplice richiesta GET a un server per ricevere dati HTML. Devi semplicemente fornire l'URL come parametro.

Passo 2: Elaborazione della risposta
Dopo che l'operazione di Fetch è completata, ricevi una risposta. Questa risposta è inizialmente anch'essa un Promise, che puoi elaborare con il metodo then(). In questo passo, mostriamo come ottenere lo stato iniziale e gli header della risposta.
È importante notare che gli oggetti Response non contengono direttamente i dati della risposta, ma solo informazioni fondamentali come stato e header.
Passo 3: Accesso al corpo della risposta
Adesso arriva la parte interessante – la lettura del contenuto del corpo. Puoi utilizzare il metodo response.text() per ottenere il testo della risposta HTTP. Questo metodo restituisce nuovamente un Promise, che puoi a sua volta richiamare con then().
In questo passo, spieghiamo che la lettura del testo è un'operazione asincrona, per la quale hai nuovamente bisogno del concetto di Promise.
Passo 4: Evitare l'inferno dei callback
Quando desideri gestire più operazioni asincrone in sequenza (ad esempio, Fetch e poi leggere il testo), puoi vedere che non devi sempre annidare ulteriormente per elaborare i risultati. Puoi invece lavorare al livello stesso restituendo Promises.
Ciò significa che puoi chiamare il metodo then() anche all'interno del metodo then() del Promise precedente, mantenendo il tuo codice più chiaro.
Passo 5: Gestione degli errori con catch
Gli errori sono una parte inevitabile dello sviluppo software. Utilizzando il metodo catch() dei Promises, puoi reagire agli errori. Ad esempio, se ti trovi in una situazione in cui la richiesta fallisce o riscontri un errore di rete, verrà chiamato il metodo catch().
In questo contesto, mostriamo come gestire elegantemente gli errori e renderli comprensibili per identificare tempestivamente potenziali problemi.

Passo 6: Creare Promises personalizzati
In questo passo impari come creare Promises personalizzati. Per farlo, utilizzi il metodo new Promise(), dove fornisci una funzione che determina la logica asincrona. Utilizziamo la funzione setTimeout per simulare un ritardo e mostrare il ritorno di un valore.
Passo 7: Utilizzo di resolve e reject
All'interno del Promise creato, puoi chiamare le funzioni resolve e reject per indicare se il Promise è stato completato con successo o se è fallito. Questo ti offre il controllo per gestire in modo flessibile i diversi flussi della tua applicazione.
Passo 8: Chain-ability dei Promises
Infine, puoi riconoscere che i Promises hanno la capacità di formare catene. Ciò significa che puoi chiamare i metodi then() e catch() uno dopo l'altro, rendendo la gestione delle operazioni asincrone ancora più semplice e leggibile.
Creando una catena di Promises, mantieni la chiarezza nella struttura del tuo codice, indipendentemente da quanto complessa sia la logica.
Riepilogo - Introduzione ai Promises di JavaScript
È evidente che i Promises sono uno strumento indispensabile nello sviluppo moderno di JavaScript. Favoriscono una gestione chiara e leggibile delle operazioni asincrone e rendono facile lavorare con richieste HTTP, senza essere sopraffatti dalle funzioni callback.
Domande frequenti
Cos'è un Promise?Un Promise è un oggetto che rappresenta l'eventualità di un'operazione asincrona e restituisce il suo risultato non appena è completata.
A cosa serve l'API Fetch?L'API Fetch viene utilizzata per effettuare richieste HTTP in modo semplice ed efficiente, utilizzando i Promises.
Come gestisco gli errori nei Promises?Gli errori vengono gestiti con il metodo catch(), che può seguire ogni Promise.
Posso creare Promises personalizzati?Sì, puoi creare i tuoi Promises utilizzando il metodo new Promise() e le funzioni resolve e reject.
I Promises sono sincroni o asincroni?I Promises sono asincroni e consentono a JavaScript di continuare a funzionare mentre si attende il risultato di un'operazione asincrona.