Sostituisci callback con asincrono/Attendi

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.

Prompt in formato libero

Esegui il refactoring di questo codice JavaScript in modo che utilizzi asinc/await anziché i callback per la gestione delle 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: aggrega l'operazione asincrona 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 è stata 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, causando l'esecuzione del blocco catch.
  8. Eseguiremo nuovamente 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 di asinc/attesa:

  • Migliore leggibilità: il codice è più conciso e più facile da capire, in quanto il flusso asincrono è più esplicito.
  • Gestione gestione degli errori: il blocco try...catch fornisce un modo chiaro per gestire gli errori.
  • Niente callback: evitiamo i callback nidificati, rendendo il codice più gestibile.
  • Flusso di controllo migliore: l'esecuzione del codice è più prevedibile, poiché 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