0Pricing
JavaScript Academy · Aula

Streams de transformação

Modifique dados à medida que fluem por um pipeline.

Streams de transformação é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de JavaScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de JavaScript Academy inclui 4 aulas no total.

O que é um TransformStream?

Um TransformStream fica entre um lado legível e um lado gravável. Os blocos escritos na entrada são transformados e emitidos na saída — uma etapa de processamento que mapeia, filtra ou remodela os dados durante o fluxo.

Anatomia

Ele tem duas extremidades: writable (onde os dados entram) e readable (onde os dados transformados saem).

const ts = new TransformStream();
console.log(ts.writable, ts.readable);

O método de transformação

Defina o comportamento com uma função transform(chunk, controller). Chame controller.enqueue() para emitir a saída.

const upper = new TransformStream({
  transform(chunk, controller) {
    controller.enqueue(chunk.toUpperCase());
  }
});

Uma entrada, várias saídas

Uma transformação pode emitir zero, um ou vários blocos para cada entrada — perfeito para dividir ou expandir dados.

const splitter = new TransformStream({
  transform(line, controller) {
    for (const word of line.split(" ")) controller.enqueue(word);
  }
});

Filtrando com transformações

Simplesmente não coloque na fila os blocos que deseja descartar.

const onlyEven = new TransformStream({
  transform(n, controller) {
    if (n % 2 === 0) controller.enqueue(n);
  }
});

O método de finalização

flush(controller) é executado uma vez quando a entrada termina — ideal para emitir sobras armazenadas em buffer ou um bloco final.

const ts = new TransformStream({
  transform(c, ctrl) { ctrl.enqueue(c); },
  flush(ctrl) { ctrl.enqueue("[END]"); }
});

Armazenando dados entre blocos

Mantenha o estado no fechamento para unir blocos parciais, como ao montar linhas completas a partir de limites arbitrários entre bytes.

let buffer = "";
new TransformStream({
  transform(chunk, ctrl) {
    buffer += chunk;
    const parts = buffer.split("\n");
    buffer = parts.pop();
    for (const line of parts) ctrl.enqueue(line);
  },
  flush(ctrl) { if (buffer) ctrl.enqueue(buffer); }
});

Fluxos de transformação integrados

A plataforma fornece TextDecoderStream, TextEncoderStream e CompressionStream/DecompressionStream — transformações prontas para uso.

const gzip = new CompressionStream("gzip");
const compressed = inputStream.pipeThrough(gzip);

Conectando com pipeThrough

readable.pipeThrough(transform) conecta uma origem a uma transformação e retorna a saída legível da transformação, pronta para a próxima etapa.

const out = sourceStream
  .pipeThrough(new TextDecoderStream())
  .pipeThrough(upper);

Transformações assíncronas

transform pode ser assíncrona — use await dentro dela para chamar APIs ou realizar trabalho assíncrono por bloco. O fluxo aguarda a promessa.

new TransformStream({
  async transform(chunk, ctrl) {
    const result = await process(chunk);
    ctrl.enqueue(result);
  }
});

Propagação de erros

Lançar uma exceção dentro de transform faz o fluxo entrar em erro; os consumidores posteriores veem o erro e o fluxo de processamento é encerrado.

new TransformStream({
  transform(chunk, ctrl) {
    if (!valid(chunk)) throw new Error("bad chunk");
    ctrl.enqueue(chunk);
  }
});

Verificação rápida

Teste os fluxos de transformação.

Recapitulação: fluxos de transformação

Você criou transformações com transform e flush, mapeou, filtrou e expandiu blocos, armazenou dados entre os limites dos blocos, usou recursos integrados como CompressionStream e conectou etapas com pipeThrough. A seguir: contrapressão e encadeamento.

Perguntas Frequentes

A aula “Streams de transformação” é grátis?

Sim — o texto completo de “Streams de transformação” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de JavaScript Academy, atualize para CoddyKit PRO. O curso de JavaScript Academy inclui 4 aulas no total.

O que vou aprender em “Streams de transformação”?

Modifique dados à medida que fluem por um pipeline. Você pratica JavaScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar JavaScript Academy?

Nenhuma experiência prévia é necessária. JavaScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Streams de transformação”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de JavaScript Academy?

Sim. Cada aula de JavaScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Streams legíveis
  2. Respostas de fetch em fluxo
  3. Streams de transformação
  4. Contrapressão e canalização
← Voltar para JavaScript Academy