/** * Praticar 4 — Escolher o combinador. * * npx tsx praticar/04-combinadores.ts */ import { esperar } from '../src/biblioteca.js'; /** Três fontes, com tempos e desfechos diferentes. */ const rapidaQueFalha = (): Promise => esperar(100).then(() => { throw new Error('fonte rápida fora do ar'); }); const media = (): Promise => esperar(250).then(() => 'resposta da fonte média'); const lenta = (): Promise => esperar(400).then(() => 'resposta da fonte lenta'); // TODO 1: para cada situação, escreva em comentário qual combinador usar e por // quê. Só depois escreva o código. // // (a) a tela precisa das três fichas; sem uma delas não há o que mostrar; // (b) o relatório mostra o que deu certo e lista o que falhou; // (c) basta a primeira resposta boa — as outras fontes são redundantes; // (d) medir quanto tempo a primeira notícia demora, boa ou má. // TODO 2: implemente as quatro e imprima o tempo de cada uma com um // cronômetro. Compare com a sua previsão do TODO 1. // TODO 3: uma das quatro rejeita em ~100 ms com o erro da fonte rápida. Explique // por que ela não espera pelas fontes que dariam certo. // TODO 4: faça as três fontes falharem. Qual combinador passa a rejeitar com um // `AggregateError`? Imprima quantos erros ele carrega. void Promise.allSettled([rapidaQueFalha(), media(), lenta()]).then((resultados) => { console.log('exemplo de partida:', resultados.map((r) => r.status).join(', ')); });