NodeJS 不换行打印,实现简单进度条效果
实现说明
使用 console.log('hello')
打印,会自动在结尾加上 \r
, 所以 每次打印都是在新的一样,
在 Node
中,可以使用 process.stdout.write('hello')
实现不换行打印,一直在当前行追加,
如果我们想 每次打印都从 当前行的行首开始打印, 可以 在 process.stdout.write
中添加 转义字符 \r, 像这样 process.stdout.write('hello \r')
。
文义来说\r代表回车,\n代表换行
在老式的机械打字机,如果你想在下一行最左端开始继续打印,需要做两个动作,先把机头重新推回最左侧,这就是回车,但是他还没有换行,然后再按一下换行键,这样才到下一行。
计算机刚产生的时候,主要还是文字界面,受打字机影响,也就有了这两个特殊字符
示例代码
test-print.js
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
!(async () => {
const total = 10
for (let i = 0; i < total; i++) {
await sleep(1000) // 每次延时 1s
process.stdout.write(`${i + 1} / ${total} \r`)
}
console.log('\n完成')
})()
运行效果演示:
参考:
nodejs printing to console without a trailing newline
C语言中\r是什么意思?和\n有什么区别