Console.log()和process.stdout.write有什么不同?

时间:2018-03-08 14:30:13

标签: node.js

如果console.log只是在末尾有一个换行符的process.stdout.write,那么为什么我在使用process.stdout.write时没有打印任何内容但是我在console.log()中得到了答案以下代码。

var waittime = 3000;
var currenttime = 0;
var waitint = 10;

function percentage(p) {
    process.stdout.clearLine();
    process.stdout.cursorTo(0);
    process.stdout.write(`waiting ... ${p}%`);
}

var interval = setInterval(function() {
    currenttime += waitint;
    percent = Math.floor((currenttime / waittime) * 100);
    percentage(percent);
}, waitint);

setTimeout(function() {
    clearInterval(interval);
    percentage(100);
    process.stdout.write("\nGowtham");
}, waittime);

process.stdout.write("\nIt's not getting displayed");
//console.log("It's getting displayed here!"); 

怎么了? 我猜是有区别的。如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:2)

请花一些时间逐步分析代码中调用的process.stdout.*方法。

第一件事就是最后一行:

process.stdout.write("\nIt's not getting displayed");

这会打印出你的信息。

在此之后,Node执行setInterval回调,其中包含percentage()调用。在那里,第一个电话是:

process.stdout.clearLine();

因此您的输出会被打印并立即删除。 console.log()会在输出中附加换行符,因此process.stdout.clearLine();会影响您的消息后的空行。

如果您希望代码正常工作,请在输出字符串中添加换行符:

process.stdout.write("\nNow it's getting displayed, duh!\n");