Nas aulas anteriores, aprendemos sobre Promises e Try, Catch, Finally e vimos como elas resolvem os problemas dos callbacks, trazendo mais organização ao código assíncrono, além de evitar o travamento da execução do código.

Mas ainda assim, o uso de then e catch pode deixar o código longo e difícil de acompanhar.

Para resolver isso, o JavaScript introduziu async e await, que permitem escrever código assíncrono com cara de código síncrono.

🎯 Objetivo da aula

Ao final desta aula, você será capaz de:

  • Entender o que são async e await
  • Escrever código assíncrono mais legível
  • Substituir then e catch
  • Tratar erros com try e catch
  • Ler código assíncrono como se fosse síncrono

O problema que async/await resolve

Veja um exemplo usando Promises:

 
        buscarDados() .then(dados => 
        { 
          console.log(dados); return processarDados(dados); 
        }) .then(resultado => 
        { 
          console.log(resultado); 
        }) .catch(erro => 
        { 
          console.log(erro); 
        }); 

Funciona, mas a leitura não é tão natural.

Agora veja a mesma lógica usando async e await.

O que significa async?

Quando você coloca async antes de uma função, você está dizendo:

👉 “Essa função trabalha com Promises”.

Toda função async sempre retorna uma Promise, mesmo que você não perceba.

 async function exemplo() { return "Olá"; }
          exemplo().then(resposta => 
          {
            console.log(resposta);
          });
 console.log(resposta); // Saída será "Olá" 

O que significa await?

O await só pode ser usado dentro de funções async.

Ele diz ao JavaScript:

👉 “Espere essa Promise terminar antes de continuar”.

Mas atenção: isso não trava a aplicação.

Primeiro exemplo completo

 
  function buscarDados() 
  { 
    return new Promise(resolve => 
    { 
      setTimeout(() => 
      { 
        resolve("Dados carregados"); 
      }, 2000); 
    }); 
  }
  async function executar() 
  {
    const dados = await buscarDados();
    console.log(dados);
  }
  executar();
 
  console.log(dados); 
  // Saída será "Dados carregados" (após 2 segundos) 

Leia esse código como:

  • Espere buscar os dados
  • Depois, use o resultado

Comparando Promise vs async/await

Com then:

 buscarDados().then(dados => { console.log(dados); }); 

Com async/await:

 const dados = await buscarDados(); console.log(dados); 
async/await não substitui Promises — ele é apenas uma forma mais elegante de usá-las.

Tratando erros com try/catch

Com async/await, tratamos erros usando try e catch.

 
    function falhar() 
    { 
      return Promise.reject("Erro ao carregar dados"); 
    }
    async function executar() 
    {
      try {
        const resultado = await falhar();
        console.log(resultado);
      } 
      catch (erro)
      {
        console.log(erro);
      }
    }
    executar();
 
  console.log(erro); 
  // Saída será "Erro ao carregar dados" 

Código assíncrono que parece síncrono

Esse é o grande poder do async/await:

  • Fluxo mais claro
  • Menos indentação
  • Leitura natural
  • Mais fácil de debugar
Usar await fora de função async causa erro.

Resumo da aula para nunca mais esquecer

  • async define funções assíncronas
  • await espera uma Promise terminar
  • O código fica mais legível
  • Erros são tratados com try/catch
  • É a forma moderna de lidar com assincronicidade

Na próxima aula, vamos entender o que é uma API.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

A partida mais longa do clássico Space Invaders durou incríveis 38 horas e 32 minutos e esta façanha foi conseguida por um jogador de apenas 12 anos! O jogo, claro, podia ser pausado para alimentação e descanso, mas ainda assim o recorde, estabelecido no dia 02/09/1980, ainda não foi quebrado. Saiba mais.


A empresa Take-Two pagou à Infogrames mais de 22 milhões de dólares pelos direitos de Civilization, em novembro de 1994. Ainda sobre este título, Sid Meier, um dos seus fundadores, é o profissional da área dos games mais premiado em todo o mundo.


O personagem Mario só possui bigode porque quando ele foi criado, em 1981, a resolução de tela dos equipamentos disponíveis não permitia que fosse desenhada uma boca, então os desenvolvedores fizeram o grande bigode para contornar essa limitação tecnológica.


O épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.


Ao completar o nível 99 do jogo Duck Hunt, para Nintendo, o jogo retorna ao primeiro nível, mas um bug impede que se acerte os patos neste recomeço. Este é um exemplo do que é chamado no mundo dos games de "Kill Screen".