79

我一直在寻找如何用其他语言做到这一点,我发现我必须使用特殊字符 \b 来删除最后一个字符。( how-do-i-erase-printed-characters-in-a-console-applicationlinux )

这不适用于 node.js 在多次调用 console.log ();

如果我写一个日志:

console.log ("abc\bd");

我得到结果:abd

但如果我写:

console.log ("abc");
console.log ("\bd");

我得到结果:

abc
d

我的目标是打印一条等待消息,例如:

等待
等待。
等待……
等待……

然后再次:

等待
等待。
ETC

都在同一行。

4

6 回答 6

137

有可用的功能process.stdout

var i = 0;  // dots counter
setInterval(function() {
  process.stdout.clearLine();  // clear current text
  process.stdout.cursorTo(0);  // move cursor to beginning of line
  i = (i + 1) % 4;
  var dots = new Array(i + 1).join(".");
  process.stdout.write("Waiting" + dots);  // write text
}, 300);

可以提供论据clearLine(direction, callback)

/**
 * -1 - to the left from cursor
 *  0 - the entire line // default
 *  1 - to the right from cursor
 */

2015 年 12 月 13 日更新:尽管上述代码有效,但它不再记录为process.stdin. 它已移至readline

于 2012-07-22T14:14:34.100 回答
19

现在你可以使用readline库和它的API来做这些事情。

于 2015-07-16T09:05:18.823 回答
19

覆盖同一行的最简单方法是

var dots = ...
process.stdout.write('Progress: '+dots+'\r');

\r是关键。它会将光标移回行首。

于 2015-09-25T15:33:14.940 回答
3

这对我有用:

process.stdout.write('\033c');
process.stdout.write('Your text here');
于 2018-11-20T19:40:44.563 回答
1

使用回车

回车符将光标放回到当前行的开头。

process.stdout.write("\r");

这个解决方案对我有用——我只用一个字符对其进行了测试。

于 2020-05-01T15:58:36.440 回答
-3

尝试通过移动字符串开头的 \r ,这对我来说在 Windows 上有效:

for (var i = 0; i < 10000; i+=1) {
    setTimeout(function() {
        console.log(`\r ${i}`);
    }, i);
}
于 2016-02-18T11:02:59.680 回答