Fácil JavaScript

Saudação assíncrona

Enunciado

Crie uma função async chamada saudar que recebe um nome e retorna a string Olá, <nome>!. Use await para esperar 500ms antes de retornar, simulando uma operação assíncrona. Depois, chame a função e imprima o resultado.

Requisitos

  • A função saudar deve ser declarada com async.
  • Deve usar await com uma Promise que resolve após 500ms.
  • O programa deve imprimir Olá, Maria! no console.

Código inicial

// Crie a função async saudar(nome) que espera 500ms e retorna 'Olá, <nome>!'
// Depois chame e imprima o resultado

Saída esperada

Olá, Maria!
Ver dica

Use new Promise(resolve => setTimeout(resolve, 500)) para criar a espera. Lembre-se de que await só funciona dentro de função async.

Mostrar solução
// Função que simula uma espera de 500ms
function esperar(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// Função assíncrona que saúda após esperar
async function saudar(nome) {
  await esperar(500); // pausa a função por 500ms
  return `Olá, ${nome}!`;
}

// Chamada da função e impressão do resultado
async function main() {
  const mensagem = await saudar('Maria');
  console.log(mensagem);
}

main();

Passo a passo

  1. Criamos a função esperar que retorna uma Promise que resolve após ms milissegundos usando setTimeout.
  2. Declaramos saudar como async, o que permite usar await dentro dela.
  3. Dentro de saudar, usamos await esperar(500) para pausar a execução até que a Promise resolva.
  4. Após a pausa, retornamos a string formatada com o nome.
  5. Em main, também async, chamamos await saudar('Maria') para obter o resultado.
  6. Imprimimos o resultado com console.log.

Por que funciona

O async transforma a função para que ela sempre retorne uma Promise. O await faz a função pausar naquela linha até que a Promise à direita seja resolvida, sem bloquear o restante do programa. Assim, o código parece síncrono, mas é assíncrono.

Erros comuns

  • Esquecer de declarar main como async: se tentar usar await fora de função async, ocorre erro de sintaxe. Solução: torne a função async ou use .then().
  • Não tratar rejeições: se esperar rejeitasse, o erro não seria capturado. Use try/catch para robustez.
  • Achar que await bloqueia a thread: await pausa apenas a função assíncrona, não o programa inteiro.

Outra forma de resolver

Usar .then() em vez de await:

saudar('Maria').then(console.log);

Essa forma é útil quando você não está dentro de uma função async.

Saída esperada

Olá, Maria!