Contrapresión y canalización
Gestione el control del flujo con pipeTo y pipeThrough.
Contrapresión y canalización es una lección gratuita de JavaScript Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de JavaScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de JavaScript Academy incluye 4 lecciones en total.
El problema de la contrapresión
Si un productor genera datos más rápido de lo que un consumidor puede procesarlos, la memoria se llena. La contrapresión es el mecanismo mediante el cual un consumidor lento indica a un productor rápido que debe reducir la velocidad.
WritableStream
Un WritableStream es un destino en el que se escriben fragmentos. Su método de destino write(chunk) puede ser asíncrono e indicar cuándo está listo para recibir el siguiente fragmento.
const sink = new WritableStream({
write(chunk) {
console.log("writing", chunk);
}
});Obtener un escritor
getWriter() bloquea el stream de escritura y devuelve un escritor con write(), close() y una promesa ready.
const writer = sink.getWriter();
await writer.write("hello");
await writer.close();La señal ready
Espere a writer.ready antes de escribir. Se resuelve cuando el stream puede aceptar más datos; así funciona la contrapresión.
await writer.ready;
await writer.write(chunk);pipeTo
readable.pipeTo(writable) conecta un origen con un destino y gestiona automáticamente la contrapresión. Devuelve una promesa que se resuelve cuando finaliza la canalización.
await readableStream.pipeTo(writableStream);
console.log("done piping");pipeThrough
pipeThrough(transform) inserta una transformación entre el origen y el destino, y devuelve el stream legible transformado. Encadene varios para crear una canalización.
sourceStream
.pipeThrough(new TextDecoderStream())
.pipeThrough(parser)
.pipeTo(consumer);Marcas de agua alta
El highWaterMark de una estrategia de encolado establece cuántos fragmentos pueden ponerse en cola antes de que se active la contrapresión. Ajústelo para equilibrar el rendimiento y el uso de memoria.
new ReadableStream(source, new CountQueuingStrategy({ highWaterMark: 4 }));desiredSize
desiredSize de un controlador indica al productor cuánto espacio queda en la cola. Cuando llega a cero o menos, deje de poner elementos en cola.
pull(controller) {
while (controller.desiredSize > 0) {
controller.enqueue(nextChunk());
}
}Cancelar una canalización
Pase { signal } a pipeTo para cancelar toda la canalización mediante un AbortController.
const ctrl = new AbortController();
readable.pipeTo(writable, { signal: ctrl.signal });
ctrl.abort();Opciones de canalización
pipeTo acepta preventClose, preventAbort y preventCancel para controlar cómo se propagan los errores y la finalización entre los extremos.
readable.pipeTo(writable, { preventClose: true });Una canalización completa
En conjunto: obtenga bytes, decodifíquelos, transfórmelos y escríbalos en un destino, todo con control de flujo automático.
const res = await fetch("/data");
await res.body
.pipeThrough(new TextDecoderStream())
.pipeThrough(lineSplitter)
.pipeTo(uiSink);Comprobación rápida
Pruebe la contrapresión.
Repaso: contrapresión y canalización
Ha conocido WritableStream y los escritores, ha esperado a ready para gestionar la contrapresión, ha conectado streams con pipeTo/pipeThrough, ha ajustado highWaterMark, ha observado desiredSize y ha cancelado canalizaciones. Con esto se completa la API de Streams.
Preguntas frecuentes
¿La lección «Contrapresión y canalización» es gratis?
Sí — el texto completo de «Contrapresión y canalización» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de JavaScript Academy, actualiza a CoddyKit PRO. El curso de JavaScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Contrapresión y canalización»?
Gestione el control del flujo con pipeTo y pipeThrough. Practicas JavaScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar JavaScript Academy?
No se requiere experiencia previa. JavaScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Contrapresión y canalización»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de JavaScript Academy?
Sí. Cada lección de JavaScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Streams legibles
- Respuestas de fetch en streaming
- Streams de transformación
- Contrapresión y canalización