Есть ли какой-нибудь stdout-flush для nodejs, как python или другие языки?
sys.stdout.write('some data')
sys.stdout.flush()
Прямо сейчас я видел только process.stdout.write()
для nodejs.
Есть ли какой-нибудь stdout-flush для nodejs, как python или другие языки?
sys.stdout.write('some data')
sys.stdout.flush()
Прямо сейчас я видел только process.stdout.write()
для nodejs.
process.stdout
- это объект WritableStream
, а метод WritableStream.write()
автоматически очищает поток (если только он не был явно укутан). Тем не менее, он вернет true, если флеш был успешным, и false, если буфер ядра был заполнен и он еще не может писать. Если вам нужно писать несколько раз подряд, вы должны обработать событие drain
.
Смотрите документацию для write
.
В новых версиях NodeJS вы можете передать обратный вызов на .write()
, который вызывается после сброса данных:
sys.stdout.write('some data', () => {
console.log('The data has been flushed');
});
Это точно так же, как проверка результата .write()
и регистрация на событие drain
:
var write = sys.stdout.write('some data');
if (!write) {
sys.stdout.once('drain', () => {
console.log('The data has been flushed');
});
}
write возвращает true
, если данные были сброшены. Если он возвращает false
, вы можете дождаться события "стока".
Я думаю, что нет flush
, потому что это будет операция блокировки.
Существует еще одна функция stdout
, которая очищает последний вывод терминала, который является вроде работы типа 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
переместит курсор в позицию 0
, которая является начальной точкой
используйте функцию flush
до stdout.write
, потому что она очистит экран, если вы поместите его после того, как вы не увидите какой-либо вывод