Sostituisci Callbacks con Async/Await

Sostituisci i callback con asinc/await per migliorare la leggibilità e la gestione degli errori in JavaScript.

Puoi eseguire query direttamente su un modello e testare i risultati restituiti quando utilizzi valori parametro diversi con la console Cloud o chiamando direttamente l'API Vertex AI.

Richiesta in formato libero

Esegui il refactoring di questo codice JavaScript in modo da utilizzare le chiamate asincrone/attese anziché callback per gestire le operazioni asincrone. L'obiettivo è migliorare la leggibilità del codice e la gestione degli errori.

function fetchData(url, callback) {
  http.get(url, function(response) {
    let data = '';
    response.on('data', (chunk) => {
      data += chunk;
    });
    response.on('end', () => {
      callback(null, data);
    });
  }).on('error', (err) => {
    callback(err);
  });
}

Risposta


async function fetchData(url) {
try {
const response = await new Promise((resolve, reject) => {
http.get(url, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
resolve(data);
});
}).on('error', reject);
});
return response;
} catch (error) {
throw error; // Re-throw the error to be handled by the caller
}
}

Spiegazione:

  1. Funzione async: definiamo la funzione fetchData come async, consentendoci di utilizzare await al suo interno.
  2. Blocco try...catch:l'operazione asincrona viene eseguita in un blocco try...catch per gestire i potenziali errori.
  3. Promise e await:
  4. Creiamo un Promise che si risolve con i dati quando la risposta viene ricevuta per intero.
  5. Utilizziamo await per mettere in pausa l'esecuzione della funzione fino alla risoluzione di Promise.
  6. Gestione degli errori:
  7. Se si verifica un errore durante la richiesta http.get, viene richiamata la funzione reject di Promise, determinando l'esecuzione del blocco catch.
  8. Eseguiamo di nuovo l'errore utilizzando throw error per propagarlo al chiamante.
  9. Valore restituito: la funzione fetchData restituisce i dati recuperati in caso di esito positivo.

Utilizzo:

async function main() {
try {
const data = await fetchData('https://example.com/data');
console.log(data);
} catch (error) {
console.error('Error fetching data:', error);
}
}

main();

Vantaggi dell'utilizzo della modalità asincrona/in attesa:

  • Maggiore leggibilità: il codice è più conciso e più facile da comprendere, poiché il flusso asincrono è più esplicito.
  • Gestione gestione degli errori: il blocco try...catch fornisce un modo chiaro per gestire gli errori.
  • Non devi preoccuparti dei callback: evitiamo i callback nidificati rendendo il codice più gestibile.
  • Migliore flusso di controllo: l'esecuzione del codice è più prevedibile, in quanto await mette in pausa la funzione fino al completamento dell'operazione asincrona.
Modello: gemini-1.5-flash-001
Temperatura: 1
Numero massimo di token di output: 8192
TopK: 40
TopP: 0,95