/** * Praticar 2 — Do callback ao async/await. * * npx tsx praticar/02-ficha-do-livro.ts */ import { buscarLivro, contarEmprestimosAbertos } from '../src/biblioteca.js'; type Callback = (erro: Error | null, valor?: T) => void; /** Versão em estilo de callback, já pronta — é o ponto de partida. */ function fichaComCallback(id: number, callback: Callback): void { buscarLivro(id).then( (livro) => { contarEmprestimosAbertos(livro.id).then( (total) => callback(null, `${livro.titulo} — ${total} em aberto`), (erro: unknown) => callback(erro as Error), ); }, (erro: unknown) => callback(erro as Error), ); } // TODO 1: escreva `ficha(id: number): Promise` com `async`/`await`, // produzindo exatamente o mesmo texto. // TODO 2: trate o caso do livro inexistente (id 99) devolvendo a string // 'livro não encontrado' em vez de propagar o erro. Use `try`/`catch` e // verifique o tipo do erro com `instanceof` antes de assumir o que ele é. // TODO 3: escreva `fichas(ids: number[]): Promise`. Antes de // escrever, responda em comentário: as buscas dependem umas das outras? // A resposta decide se você usa um laço com `await` ou `Promise.all`. // TODO 4: rode as duas versões (callback e async) e confirme que a saída é a // mesma. Depois compare o número de linhas de cada uma. fichaComCallback(1, (erro, ficha) => { console.log('callback :', erro ? erro.message : ficha); });