Aulas

Curso de Javascript – Aula 8 | Async/Await e Fetch API

1 ano atrás

Neste módulo, vamos explorar duas poderosas funcionalidades do JavaScript para lidar com operações assíncronas de maneira mais simples e eficiente: async/await e a Fetch API. Enfim, o JavaScript realiza tarefas baseadas em eventos e operações assíncronas, o que significa que muitas vezes nós precisamos realizar tarefas que levam algum tempo para serem concluídas, como requisições HTTP a APIs, acesso a banco de dados ou leitura de arquivos.

O async/await é uma abordagem moderna para lidar com operações assíncronas em JavaScript, proporcionando uma sintaxe mais síncrona e legível. Enfim, com o async, podemos declarar funções assíncronas, que executam tarefas assíncronas e podem pausar a execução usando o await até que as Promises sejam resolvidas ou rejeitadas. Ou seja, isso elimina a necessidade de encadeamento excessivo de .then() e simplifica a estruturação do código assíncrono.

A Fetch API é uma funcionalidade que nos permite fazer requisições HTTP assíncronas de forma mais amigável e flexível. Enfim, baseada em Promises, a Fetch API oferece uma interface moderna e intuitiva para lidar com solicitações e respostas a servidores e APIs. Ou seja, combinada com async/await, a Fetch API permite uma comunicação eficiente e segura com servidores, tornando nossas aplicações web mais interativas e responsivas.

Neste módulo, vamos aprender como utilizar async/await para escrever código assíncrono de forma síncrona e legível, além de explorar as diversas funcionalidades da Fetch API para realizar requisições HTTP assíncronas, manipular respostas e tratar erros de forma controlada. Enfim, compreender e dominar esses recursos nos permitirá criar aplicações web mais eficientes, dinâmicas e confiáveis, proporcionando uma experiência de usuário mais agradável.

Utilização de async/await para escrever código assíncrono de forma síncrona

Nesta aula, vamos aprender sobre o uso de async/await, uma abordagem moderna para lidar com operações assíncronas em JavaScript. Enfim, o async/await é uma alternativa às Promises que nos permite escrever código assíncrono de forma mais síncrona e legível, eliminando a necessidade de usar callbacks ou encadeamento de .then().

Declarando Funções Assíncronas

Para usar async/await, primeiro precisamos declarar uma função com a palavra-chave async. Ou seja, isso indica que a função executará operações assíncronas e que pode conter await para aguardar a conclusão dessas operações.

Exemplo de função assíncrona:
async function minhaFuncao() {
  // Código assíncrono aqui
}

Utilizando o await

O await é usado dentro de funções assíncronas para aguardar a resolução de uma Promise. A Promise faz com que o código pause sua execução até que seja resolvida ou rejeitada. A Promise retorna o valor resolvido quando ela é resolvida com sucesso, enquanto lança um erro quando é rejeitada.

Exemplo de uso de await:
function aguardar(segundos) {
  return new Promise(resolve => setTimeout(resolve, segundos * 1000));
}

async function executar() {
  console.log("Início");
  await aguardar(2);
  console.log("Depois de 2 segundos");
  await aguardar(3);
  console.log("Depois de mais 3 segundos");
  return "Tudo concluído";
}

executar().then(resultado => console.log(resultado));

O async/await é uma forma mais elegante e síncrona de lidar com operações assíncronas em JavaScript. Enfim, ao declarar funções como assíncronas e utilizar o await dentro delas, podemos aguardar a conclusão de Promises sem a necessidade de encadeamento excessivo de .then(). Essa abordagem melhora a legibilidade e a manutenibilidade do código, tornando o desenvolvimento assíncrono mais simples e claro.

Utilização da Fetch API para fazer requisições HTTP assíncronas

Nesta aula, vamos explorar a Fetch API, uma funcionalidade moderna do JavaScript para fazer requisições HTTP assíncronas. A Fetch API oferece uma interface mais amigável para realizar chamadas a APIs e servidores, além de ser baseada em Promises, o que facilita seu uso com async/await.

Realizando Requisições com Fetch

A Fetch API permite fazer requisições HTTP usando o método fetch(). Esse método retorna uma Promise que resolve em uma resposta (response) da requisição. Para obter os dados da resposta, precisamos usar métodos como json(), text() ou blob(), dependendo do tipo de dados que estamos recebendo.

Exemplo de uso da Fetch API:
async function buscarDados() {
  try {
    const response = await fetch('https://api.exemplo.com/dados');
    const dados = await response.json();
    console.log(dados);
  } catch (erro) {
    console.error('Erro ao buscar dados:', erro);
  }
}

buscarDados();

Configurando Opções de Requisição

A Fetch API também permite configurar as opções da requisição, como método (GET, POST, etc.), cabeçalhos (headers), corpo (body) e outras informações relevantes.

Exemplo de uso de opções na Fetch API:
async function enviarDados() {
  const options = {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ nome: 'João', idade: 30 }),
  };

  try {
    const response = await fetch('https://api.exemplo.com/enviar', options);
    const resultado = await response.json();
    console.log(resultado);
  } catch (erro) {
    console.error('Erro ao enviar dados:', erro);
  }
}

enviarDados();

A Fetch API é uma poderosa ferramenta para fazer requisições HTTP assíncronas em JavaScript. Enfim, com a interface amigável e a compatibilidade com Promises, a Fetch API torna a obtenção e envio de dados para servidores e APIs mais simples e eficiente. Ao utilizar async/await junto com a Fetch API,

podemos criar códigos assíncronos de forma mais síncrona e clara, proporcionando uma melhor experiência de desenvolvimento e tornando nossas aplicações mais robustas e interativas.

Manipulação de respostas e tratamento de erros

Nesta aula, vamos aprender a manipular as respostas obtidas através da Fetch API e como lidar com tratamento de erros em requisições HTTP assíncronas. Enfim, é essencial saber interpretar e extrair informações das respostas recebidas, além de tratar possíveis falhas para fornecer um feedback adequado ao usuário.

Manipulação de Respostas

Depois de fazer uma requisição usando a Fetch API, precisamos extrair os dados da resposta para utilizá-los em nossa aplicação. Ou seja, para isso, podemos usar métodos como json(), text() ou blob(), dependendo do tipo de dados que esperamos receber.

Exemplo de manipulação de respostas:
async function buscarDados() {
  try {
    const response = await fetch('https://api.exemplo.com/dados');
    const dados = await response.json();
    console.log(dados);
  } catch (erro) {
    console.error('Erro ao buscar dados:', erro);
  }
}

buscarDados();

Tratamento de Erros

Em operações assíncronas, erros podem ocorrer em diversas etapas da requisição. Enfim, para lidar com falhas de forma controlada, podemos utilizar o bloco try/catch. Dessa forma, caso ocorra algum erro na requisição, podemos tratar a situação de acordo com o tipo de erro.

Exemplo de tratamento de erros:
async function enviarDados() {
  const options = {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ nome: 'João', idade: 30 }),
  };

  try {
    const response = await fetch('https://api.exemplo.com/enviar', options);
    if (!response.ok) {
      throw new Error('Erro ao enviar dados'); // Lança um erro customizado
    }
    const resultado = await response.json();
    console.log(resultado);
  } catch (erro) {
    console.error('Erro na requisição:', erro.message);
  }
}

enviarDados();

A manipulação de respostas e o tratamento de erros em requisições HTTP assíncronas são habilidades essenciais para garantir a robustez e eficiência de nossas aplicações web. Enfim, ao entender como extrair os dados das respostas e como tratar erros de forma adequada, podemos fornecer uma experiência mais confiável e interativa para os usuários. Ou seja, combinando a Fetch API com async/await, temos uma abordagem moderna e clara para lidar com operações assíncronas em JavaScript, tornando o desenvolvimento de aplicações web mais eficiente e produtivo.

Categorias
Arquivos