nodejs 是否有任何标准输出刷新,就像 python 或其他语言一样?
sys.stdout.write('some data')
sys.stdout.flush()
现在我只看到process.stdout.write()
了nodejs。
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
事件完全相同:
let write = sys.stdout.write('some data');
if (!write) {
sys.stdout.once('drain', () => {
console.log('The data has been flushed');
});
}
true
如果数据已被刷新,则write返回。如果它返回false
,您可以等待 'drain' 事件。
我认为没有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
因为它会清除屏幕,如果你把你不会看到任何输出