🧩 Exercícios: Operadores Essenciais do RxJS (switchMap, debounceTime, catchError)
Spec Frontend Com Angular • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 11.1 — Transformação e Filtragem com map() e filter()
Contexto: Transformação e Filtragem com map() e filter() no contexto de Operadores Essenciais do RxJS (switchMap, debounceTime, catchError).
Requisitos de Execução:
- Criar pipeline RxJS que filtre números pares e multiplique por 10 com
pipe(filter(x => x % 2 === 0), map(x => x * 10)).
Resultado Esperado
Pipeline de transformação matemática de streams executado.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_1_SeuNome - Envie na tarefa:
Atividade Cap 11 - Operadores Essenciais do RxJS (switchMap, debounceTime, catchError)
🔑 Gabarito de Código & Solução Comentada
// pipeline-basic.ts
import { of } from 'rxjs';
import { map, filter } from 'rxjs/operators';
of(1, 2, 3, 4, 5, 6).pipe(
filter(n => n % 2 === 0),
map(n => n * 10)
).subscribe(res => console.log('Resultado:', res)); // 20, 40, 60
🔍 Nível 2: Prática
Problema 11.2 — Typeahead de Busca com debounceTime() e distinctUntilChanged()
Contexto: Typeahead de Busca com debounceTime() e distinctUntilChanged() no contexto de Operadores Essenciais do RxJS (switchMap, debounceTime, catchError).
Requisitos de Execução:
- Tratar input de busca aguardando 300ms de pausa na digitação e ignorando termos repetidos.
Resultado Esperado
Busca disparada apenas quando o usuário terminar de digitar.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_2_SeuNome - Envie na tarefa:
Atividade Cap 11 - Operadores Essenciais do RxJS (switchMap, debounceTime, catchError)
🔑 Gabarito de Código & Solução Comentada
// typeahead.ts
import { Subject } from 'rxjs';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
export const termoBusca$ = new Subject<string>();
termoBusca$.pipe(
debounceTime(300),
distinctUntilChanged()
).subscribe(termo => console.log('Executando busca no servidor por:', termo));
⚡ Nível 3: Integração
Problema 11.3 — Cancelamento de Requisições Obsoletas com switchMap()
Contexto: Cancelamento de Requisições Obsoletas com switchMap() no contexto de Operadores Essenciais do RxJS (switchMap, debounceTime, catchError).
Requisitos de Execução:
- Mapear termo de busca para chamada HTTP cancelando a requisição anterior em caso de nova digitação.
Resultado Esperado
Requisição anterior cancelada automaticamente com switchMap.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_3_SeuNome - Envie na tarefa:
Atividade Cap 11 - Operadores Essenciais do RxJS (switchMap, debounceTime, catchError)
🔑 Gabarito de Código & Solução Comentada
// switchmap-search.ts
import { Subject, of } from 'rxjs';
import { switchMap, delay } from 'rxjs/operators';
export const searchInput$ = new Subject<string>();
searchInput$.pipe(
switchMap(q => of(`Resultado para ${q}`).pipe(delay(500)))
).subscribe(console.log);
🏆 Nível 4: Desafio Corporativo
Problema 11.4 — Tratamento Resiliente de Erros com catchError() e retry()
Contexto: Tratamento Resiliente de Erros com catchError() e retry() no contexto de Operadores Essenciais do RxJS (switchMap, debounceTime, catchError).
Requisitos de Execução:
- Reexecutar chamada com
retry(2)e fornecer fallback elegante comcatchError(() => of([])).
Resultado Esperado
Falha de rede tratada com retries automáticos e retorno de lista vazia.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_4_SeuNome - Envie na tarefa:
Atividade Cap 11 - Operadores Essenciais do RxJS (switchMap, debounceTime, catchError)
🔑 Gabarito de Código & Solução Comentada
// resilient-stream.ts
import { throwError, of } from 'rxjs';
import { retry, catchError } from 'rxjs/operators';
export function buscarComFallback(source$: any) {
return source$.pipe(
retry(2),
catchError((err) => {
console.error('Falha persistente:', err);
return of([]); // Fallback
})
);
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |