Promises

Riassunto

Le Promises in JavaScript sono oggetti utilizzati per gestire operazioni asincrone. Rappresentano un valore che può essere disponibile ora, in futuro o mai. Le Promises possono essere in uno dei tre stati: pending (in attesa), fulfilled (completata con successo) e rejected (fallita).

Introduzione alle Promises

Le Promises in JavaScript sono uno strumento potente per gestire operazioni asincrone. Consentono di scrivere codice più leggibile e gestire con eleganza il successo o il fallimento di operazioni asincrone come chiamate API.

Cosa Sono:

Una Promise è un oggetto che rappresenta l'eventuale completamento o fallimento di un'operazione asincrona. Le Promises hanno tre stati:

  • Pending: La Promise è in attesa e il risultato non è ancora disponibile.
  • Fulfilled: L'operazione è completata con successo e la Promise ha un valore.
  • Rejected: L'operazione è fallita e la Promise ha una ragione (errore).

Creare una Promise

Per creare una Promise, si utilizza il costruttore Promise, che prende una funzione con due parametri: resolve e reject. La sintassi è la seguente:


            const myPromise = new Promise((resolve, reject) => {
              // Operazione asincrona
              if (/* operazione ha successo */) {
                resolve('Successo!');
              } else {
                reject('Errore!');
              }
            });
          

Utilizzare una Promise

Per gestire il risultato di una Promise, si utilizzano i metodi then e catch:


            myPromise.then((value) => {
              console.log(value); // Gestisce il successo
            }).catch((error) => {
              console.error(error); // Gestisce l'errore
            });
          

Esempio Pratico

Ecco un esempio di una Promise che simula una richiesta API:


            const fetchData = () => {
              return new Promise((resolve, reject) => {
                setTimeout(() => {
                  const success = true; // Simula il successo della richiesta
                  if (success) {
                    resolve('Dati recuperati con successo!');
                  } else {
                    reject('Errore nel recupero dei dati.');
                  }
                }, 2000);
              });
            };
  
            fetchData().then((data) => {
              console.log(data);
            }).catch((error) => {
              console.error(error);
            });
          

Metodi Utili

  • Promise.all: Esegue più Promises in parallelo e aspetta che tutte siano risolte.
  • 
                  const promise1 = Promise.resolve('Uno');
                  const promise2 = Promise.resolve('Due');
                  Promise.all([promise1, promise2]).then((values) => {
                    console.log(values); // ["Uno", "Due"]
                  });
                
  • Promise.race: Restituisce la prima Promise che viene risolta o rifiutata.
  • 
                  const promise1 = new Promise((resolve) => setTimeout(resolve, 500, 'Uno'));
                  const promise2 = new Promise((resolve) => setTimeout(resolve, 100, 'Due'));
                  Promise.race([promise1, promise2]).then((value) => {
                    console.log(value); // "Due"
                  });
                

Conclusioni

Le Promises sono uno strumento essenziale per gestire operazioni asincrone in JavaScript. Consentono di scrivere codice più pulito e di gestire in modo efficace il successo e il fallimento delle operazioni asincrone.