Sobes.tech
Middle

Come lavori con JavaScript asincrono?

sobes.tech AI

Risposta dell'AI

Lavoro con l'asynchronous in JavaScript utilizzando callback, promesse e async/await.

I callback sono funzioni passate ad altre funzioni come argomenti e vengono eseguite dopo il completamento di un'operazione. Possono portare a "inferni di callback" quando sono annidati.

// Esempio di callback
function fetchData(callback) {
  setTimeout(() => {
    callback("Dati ricevuti");
  }, 1000);
}

fetchData((data) => {
  console.log(data); // Mostrerà "Dati ricevuti" dopo 1 secondo
});

Le promesse sono oggetti che rappresentano il completamento o il fallimento di un'operazione asincrona. Facilitano il lavoro con il codice asincrono, evitando annidamenti profondi. Hanno tre stati: pending (in attesa), fulfilled (completata), rejected (rifiutata).

// Esempio di promessa
function fetchDataPromise() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Dati ricevuti");
    }, 1000);
  });
}

fetchDataPromise()
  .then((data) => {
    console.log(data); // Mostrerà "Dati ricevuti" dopo 1 secondo
  })
  .catch((error) => {
    console.error("Errore:", error);
  });

Async/await è zucchero sintattico sui promise che rende il codice asincrono più leggibile, simile a quello sincrono. Una funzione contrassegnata con async restituisce sempre una promise. L'operatore await può essere usato solo all’interno di funzioni async e sospende l’esecuzione finché la promise non viene risolta o rifiutata.

// Esempio di async/await
async function fetchDataAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Dati ricevuti");
    }, 1000);
  });
}

async function processData() {
  try {
    const data = await fetchDataAsync();
    console.log(data); // Mostrerà "Dati ricevuti" dopo 1 secondo
  } catch (error) {
    console.error("Errore:", error);
  }
}

processData();

Spesso uso async/await quando lavoro con richieste API, poiché è il modo più comodo e leggibile per gestire operazioni asincrone. Per eseguire più operazioni asincrone in parallelo, uso Promise.all() o Promise.allSettled().

Utilizzo l’event loop per capire l’ordine di esecuzione del codice asincrono, microtask e macrotask.