0% acharam este documento útil (0 voto)
1 visualizações4 páginas

Modulo3 Exercicios Js

O documento aborda o conceito de assincronismo em JavaScript, explicando como o código é executado de forma não bloqueante, permitindo que outras operações continuem enquanto uma tarefa assíncrona é processada. Ele introduz callbacks, promises e a sintaxe async/await como formas de lidar com operações assíncronas, destacando suas vantagens e desvantagens. Além disso, o documento contém uma lista de exercícios práticos para aplicar os conceitos discutidos.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
1 visualizações4 páginas

Modulo3 Exercicios Js

O documento aborda o conceito de assincronismo em JavaScript, explicando como o código é executado de forma não bloqueante, permitindo que outras operações continuem enquanto uma tarefa assíncrona é processada. Ele introduz callbacks, promises e a sintaxe async/await como formas de lidar com operações assíncronas, destacando suas vantagens e desvantagens. Além disso, o documento contém uma lista de exercícios práticos para aplicar os conceitos discutidos.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

JavaScript — Modulo 3

Assincronismo
Lista de Exercicios

Bloco 1 — O que e Assincronismo

JavaScript executa o codigo linha por linha, mas algumas tarefas demoram — como ler um arquivo,
consultar um banco de dados ou fazer uma requisicao HTTP. Em vez de travar e esperar, o JS
continua executando o restante do codigo e avisa quando a tarefa terminou. Isso e o assincronismo.
Entender esse comportamento e essencial no [Link], onde quase tudo — leitura de arquivos, rotas,
banco de dados — e assincrono.

Exemplo:
[Link]('1 - inicio');

setTimeout(() => {
[Link]('2 - dentro do setTimeout');
}, 1000);

[Link]('3 - fim');

// Saida:
// 1 - inicio
// 3 - fim
// 2 - dentro do setTimeout (apos 1 segundo)

1. O que sera exibido no console e em qual ordem? Explique o motivo:


[Link]('A');
setTimeout(() => [Link]('B'), 0);
[Link]('C');
Resposta:

2. Escreva um codigo com tres [Link] e um setTimeout no meio. Antes de rodar,


tente prever a ordem de saida e depois confirme executando.
Resposta:

3. Explique com suas palavras a diferenca entre codigo sincrono e assincrono. Crie um
exemplo de cada.
Resposta:

4. Por que o [Link] usa assincronismo? Escreva um paragrafo explicando o beneficio


disso para um servidor que recebe muitas requisicoes ao mesmo tempo.
Resposta:

Bloco 2 — Callbacks
Callbacks foram a primeira forma de lidar com assincronismo em JavaScript. Uma funcao callback e
passada como argumento e executada quando a operacao assincrona termina. O padrao mais
comum no [Link] e o error-first callback: o primeiro parametro e sempre o erro (null se nao houver) e
o segundo e o resultado. Apesar de funcionarem bem, callbacks podem gerar o chamado 'callback
hell' quando aninhados demais.

Exemplo:
// Padrao error-first callback (padrao do [Link])
function buscarUsuario(id, callback) {
if (id <= 0) {
callback('ID invalido', null);
} else {
callback(null, { id, nome: 'Ana' });
}
}

buscarUsuario(1, (erro, usuario) => {


if (erro) {
[Link]('Erro:', erro);
} else {
[Link]('Usuario:', [Link]);
}
});

5. Crie uma funcao processarPedido(pedido, callback) que simule o processamento de


um pedido. Se o pedido estiver vazio, chame o callback com um erro. Caso contrario,
chame com sucesso.
Resposta:

6. Crie uma funcao autenticar(usuario, senha, callback) que verifique se usuario e


'admin' e senha e '1234'. Use o padrao error-first callback.
Resposta:

7. O que e callback hell? Escreva um exemplo com pelo menos tres callbacks aninhados
e explique por que isso e um problema.
Resposta:

8. Crie uma funcao lerArquivoFalso(nome, callback) que simule a leitura de um arquivo


usando setTimeout de 1 segundo. Chame o callback com um conteudo ficticio apos o
tempo.
Resposta:

9. Refatore o exercicio anterior para tambem tratar o caso de erro: se o nome do arquivo
estiver vazio, o callback deve receber um erro descritivo.
Resposta:

Bloco 3 — Promises

Promises (promessas) foram criadas para resolver o problema do callback hell, tornando o codigo
assincrono mais legivel e estruturado. Uma Promise representa uma operacao que ainda nao
terminou, mas vai terminar no futuro — com sucesso (resolve) ou com falha (reject). Usamos .then()
para tratar o sucesso, .catch() para tratar erros e .finally() para executar algo independente do
resultado. As Promises sao a base do async/await, que veremos no proximo bloco.

Exemplo:
function buscarDados(id) {
return new Promise((resolve, reject) => {
if (id > 0) {
resolve({ id, nome: 'Ana' });
} else {
reject('ID invalido');
}
});
}

buscarDados(1)
.then(usuario => [Link]('Encontrado:', [Link]))
.catch(erro => [Link]('Erro:', erro))
.finally(() => [Link]('Operacao finalizada'));

10. Crie uma Promise que resolve com a mensagem 'Conexao estabelecida' apos 2
segundos usando setTimeout. Use .then() para exibir o resultado.
Resposta:

11. Crie uma funcao verificarEstoque(quantidade) que retorne uma Promise. Se a


quantidade for maior que 0, resolve com 'Produto disponivel'. Caso contrario, rejeita com
'Sem estoque'.
Resposta:

12. Use .catch() para tratar o erro do exercicio anterior quando a quantidade for 0.
Adicione tambem um .finally() que exiba 'Consulta finalizada' sempre ao final.
Resposta:

13. Crie duas Promises que resolvem em tempos diferentes (use setTimeout). Use
[Link] para esperar as duas terminarem e exibir os resultados juntos.
Resposta:

14. Qual a diferenca entre [Link] e [Link]? Escreva um exemplo de cada e


explique quando usar um ou outro.
Resposta:

15. Converta a funcao autenticar do Bloco 2 (que usava callback) para retornar uma
Promise.
Resposta:

Bloco 4 — Async e Await

Async/Await e a forma mais moderna e legivel de trabalhar com assincronismo em JavaScript. Uma
funcao declarada com async sempre retorna uma Promise. Dentro dela, o await pausa a execucao ate
que a Promise seja resolvida, sem bloquear o restante do programa. O tratamento de erros e feito
com try/catch, igual ao codigo sincrono. No [Link] com Express, voce vai usar async/await em
praticamente todas as rotas que acessam banco de dados ou APIs externas.
Exemplo:
function esperar(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

async function buscarPedido(id) {


try {
[Link]('Buscando pedido...');
await esperar(1000);
if (id <= 0) throw new Error('ID invalido');
return { id, status: 'aprovado' };
} catch (erro) {
[Link]('Erro:', [Link]);
}
}

buscarPedido(5).then(p => [Link](p));

16. Crie uma funcao async chamada saudar que aguarde 1 segundo (use setTimeout
dentro de uma Promise) e depois retorne 'Ola, Mundo!'. Chame a funcao e exiba o
resultado com .then().
Resposta:

17. Reescreva a funcao verificarEstoque do Bloco 3 usando async/await em vez de


.then() e .catch().
Resposta:

18. Crie uma funcao async processarPagamento(valor) que use try/catch. Se o valor for
menor ou igual a 0, lance um erro com throw. Caso contrario, retorne 'Pagamento de
R$[valor] aprovado'.
Resposta:

19. Crie duas funcoes async que simulam buscar dados de fontes diferentes (use
setTimeout). Chame as duas com await em sequencia e depois com [Link].
Compare os comportamentos.
Resposta:

20. O que acontece se voce usar await fora de uma funcao async? Teste e explique o
erro.
Resposta:

21. Simule uma rota do Express: crie uma funcao async rotaBuscarUsuario(id) que use
try/catch, aguarde uma Promise que busca o usuario, e retorne um objeto com status
200 e os dados — ou status 404 em caso de erro.
Resposta:

Pratique cada exercicio no terminal com: node [Link]

Você também pode gostar