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 http.get(url);
let data = '';
response.on('data', (chunk) => {
data += chunk;
});
await new Promise((resolve) => response.on('end', resolve));
return data;
} catch (err) {
throw err;
}
}

Explicação:

  1. Async/Await: a função é declarada com a palavra-chave async, permitindo o uso de await no corpo.
  2. Tratamento de erros: um bloco try...catch é usado para lidar com possíveis erros durante as operações assíncronas.
  3. HTTP Get baseado em promessas: o método http.get retorna uma promessa, que é aguardada usando await. Isso garante que a execução subsequente do código aguarde a resposta antes de prosseguir.
  4. Acúmulo de dados: a variável data acumula blocos de dados recebidos do fluxo de resposta.
  5. Evento final: criamos uma nova promessa que é resolvida quando o evento "end" é emitido pelo fluxo de resposta. Isso garante que esperamos que todos os dados sejam recebidos antes de retornarem.
  6. Dados de retorno: se for bem-sucedido, os dados acumulados serão retornados.
  7. Geração de erros: se ocorrer um erro, ele será gerado e poderá ser capturado pelo autor da chamada da função fetchData.

Exemplo de uso:


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

main();
Modelo: gemini-1.5-pro-preview-0409
Temperatura: 1
Máximo de tokens de saída: 8192
TopK: 40
TopP: 0,95