/** * Praticar 5 — Tempo limite, cancelamento e repetição. * * npx tsx praticar/05-tempo-limite.ts */ import { consultarCatalogoExterno, esperar, reiniciarCatalogo } from '../src/biblioteca.js'; // TODO 1: implemente `comTempoLimite(tarefa: Promise, ms: number): Promise` // usando `Promise.race`. Deve rejeitar com um erro próprio quando o tempo // estourar, e devolver o valor quando a tarefa chegar antes. // TODO 2: prove que a tarefa original NÃO foi cancelada: faça a tarefa imprimir // uma linha ao terminar e observe essa linha aparecer depois do erro de tempo. // TODO 3: escreva `tarefaCancelavel(ms: number, signal: AbortSignal)` que // realmente pare quando o sinal disparar (`clearTimeout` no ouvinte de // 'abort'). Use `AbortSignal.timeout(150)` e confirme que a linha do TODO 2 // deixou de aparecer. // TODO 4: implemente `comRepeticao` com recuo exponencial e use-a com // `consultarCatalogoExterno`, que falha nas duas primeiras chamadas. Chame // `reiniciarCatalogo()` antes de cada execução. // TODO 5: em uma linha de comentário: por que repetir um erro de "livro não // encontrado" é desperdício, e repetir um erro de tempo esgotado não é? void (async () => { reiniciarCatalogo(); await esperar(10); try { await consultarCatalogoExterno('9788535910667'); } catch (erro) { console.log('exemplo de partida:', (erro as Error).message); } })();