Los flujos de nodos, por lo que pude encontrar 1 , retrasan todo el flujo de datos hasta el final del tic (normalmente process.nextTick , pero qué cola no es importante) y no comienzan a bombear datos sincrónicamente en llamadas de método.
Lamentablemente, no pude encontrar una garantía para este comportamiento en los documentos (espero que no la haya visto) y, por lo tanto, difícilmente puedo depender de ella. ¿Es este comportamiento en la API pública? ¿Esto se extiende a todas las transmisiones que utilizan la API para implementadores de transmisiones?
Para elaborar, a excepción de leer explícitamente sync con stream.Readable.prototype.read , todos los mecanismos parecen no comenzar a bombear datos sincrónicamente:
múltiples controladores de eventos en una fila:
import * as stream from 'node:stream'; const r = stream.Readable.from(['my\ndata', 'more\nstuff']); r.on('data', data => { /* do something */ }); // oops, attaching the first event handler could have already // sent out all data synchronously r.on('data', data => { /* do more */ });iniciar una canalización, antes de que existan los controladores de eventos:
import * as stream from 'node:stream'; import * as readline from 'node:readline'; const r = stream.Readable.from(['my\ndata', 'more\nstuff']); const p = new stream.PassThrough(); const rl = readline.createInterface({ input: p, output: null, }); r.pipe(p); // oops, starting the pipe could have already sent all the data, // giving "line" events without any listener being attached yet rl.on('line', line => { /* do something */ }); Mi esperanza es que me perdí una línea en los documentos, y eso es todo. De lo contrario, será difícil saber cuánto puedo depender de este comportamiento. Por ejemplo, en los ejemplos anteriores, uno podría pausar explícitamente la transmisión primero y reanudarla en nextTick (o similar), pero sería considerablemente más limpio si se pudiera depender de este comportamiento.
[1]: por ejemplo, toda la complejidad añadida y la construcción de realizar un seguimiento de la sync , o publicaciones antiguas que preguntan por el comportamiento en ese momento