node.js - debug - Stdout flush para NodeJS?
node js npm (4)
En las versiones más recientes de NodeJS, puede pasar una devolución de llamada a .write()
, que se llamará una vez que se .write()
los datos:
sys.stdout.write(''some data'', () => {
console.log(''The data has been flushed'');
});
Esto es exactamente lo mismo que verificar el resultado de .write()
y registrarse en el evento de drain
:
var write = sys.stdout.write(''some data'');
if (!write) {
sys.stdout.once(''drain'', () => {
console.log(''The data has been flushed'');
});
}
¿Hay alguna descarga de stdout para nodejs como Python u otros idiomas?
sys.stdout.write(''some data'')
sys.stdout.flush()
En este momento solo vi process.stdout.write()
para nodejs.
Hay otra función stdout
que para borrar la última salida al terminal, que es una especie de trabajo como la flush
function flush() {
process.stdout.clearLine();
process.stdout.cursorTo(0);
}
var total = 5000;
var current = 0;
var percent = 0;
var waitingTime = 500;
setInterval(function() {
current += waitingTime;
percent = Math.floor((current / total) * 100);
flush();
process.stdout.write(`downloading ... ${percent}%`);
if (current >= total) {
console.log("/nDone.");
clearInterval(this);
}
}, waitingTime);
cursorTo
moverá el cursor a la posición 0
que es el punto de inicio
use la función de flush
antes de stdout.write
porque borrará la pantalla, si coloca después no verá ningún resultado
write devuelve true
si los datos se han vaciado. Si devuelve false
, puede esperar el evento de ''drenaje''.
Creo que no hay flush
, porque sería una operación de bloqueo.
process.stdout
es un objeto WritableStream
, y el método WritableStream.write()
vacía automáticamente la secuencia (a menos que se haya ocultado explícitamente). Sin embargo, devolverá verdadero si la descarga fue exitosa, y falso si el búfer del núcleo estaba lleno y no puede escribir todavía. Si necesita escribir varias veces seguidas, debe manejar el evento de drain
.
Consulte la documentación para write
.