Substituir chamadas de retorno por Async/Await

As chamadas de retorno foram substituídas por async/await para melhorar a legibilidade e o tratamento de erros em JavaScript.

É possível consultar um modelo diretamente e testar os resultados retornados ao usar diferentes valores de parâmetros com o console do Cloud ou ao chamar a API Vertex AI diretamente.

Comando Formato livre

Refatore este código JavaScript para usar async/await em vez de callbacks para lidar com operações assíncronas. O objetivo é melhorar a legibilidade do código e o tratamento de erros.

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);
  });
}

Resposta


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
}
}

Explicação:

  1. Função async: definimos a função fetchData como async, o que permite usar await nela.
  2. Bloqueio try...catch: agrupamos a operação assíncrona em um bloco try...catch para lidar com possíveis erros.
  3. Promise e await:
  4. Criamos uma Promise que é resolvida com os dados quando a resposta é totalmente recebida.
  5. Usamos await para pausar a execução da função até que Promise seja resolvido.
  6. Tratamento de erros:
  7. Se ocorrer um erro durante a solicitação http.get, a função reject do Promise vai ser chamada, fazendo com que o bloco catch seja executado.
  8. Geramos o erro novamente usando throw error para promovê-lo para o autor da chamada.
  9. Valor de retorno: a função fetchData vai retornar os dados buscados se for bem-sucedida.

Uso:

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

main();

Benefícios de usar async/await:

  • Melhor legibilidade: o código é mais conciso e fácil de entender, já que o fluxo assíncrono é mais explícito.
  • Tratamento de erros simplificado: o bloco try...catch oferece uma maneira clara de lidar com erros.
  • Sem inferno de callback: evitamos callbacks aninhados, tornando o código mais sustentável.
  • Melhor fluxo de controle: a execução do código é mais previsível, porque await pausa a função até que a operação assíncrona seja concluída.
Modelo: gemini-1.5-flash-001
Temperatura: 1
Máximo de tokens de saída: 8192
TopK: 40
TopP: 0,95