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
saudardeve ser declarada comasync. - Deve usar
awaitcom 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
- Criamos a função
esperarque retorna umaPromiseque resolve apósmsmilissegundos usandosetTimeout. - Declaramos
saudarcomoasync, o que permite usarawaitdentro dela. - Dentro de
saudar, usamosawait esperar(500)para pausar a execução até que a Promise resolva. - Após a pausa, retornamos a string formatada com o nome.
- Em
main, tambémasync, chamamosawait saudar('Maria')para obter o resultado. - 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
maincomoasync: se tentar usarawaitfora de funçãoasync, ocorre erro de sintaxe. Solução: torne a funçãoasyncou use.then(). - Não tratar rejeições: se
esperarrejeitasse, o erro não seria capturado. Usetry/catchpara robustez. - Achar que
awaitbloqueia a thread:awaitpausa 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!