我知道如何更新输出的最后一行(answered here)。
我注意到有些程序更新的内容不仅仅是最后一行。
所有waiting...
行都有一个"旋转点"在它们的开头,没有一个在最后一行。
如何实现这一目标?
答案 0 :(得分:1)
您可以使用ANSI Escape sequences移动光标......
示例:打印"\033[3A"
会使光标向上移动三行
如果我理解了你想要的东西......这应该有所帮助:
var writeEscape = a => process.stdout.write("\033[" + a);
var moveUp = n => writeEscape(n +"A")
var moveDown = n => writeEscape(n + "B")
var moveRight = n => writeEscape(n +"C")
var moveLeft = n => writeEscape(n + "D")
var waitFor = n => new Promise(r => setTimeout(r,n))
writeEscape("25l"); // hide cursor use writeEscape("","25h") to show it again
process.stdout.write("waiting\n")
process.stdout.write("some other text");
moveUp(1)
moveLeft(15) // "some other text".length = 15
var printWaiting = async() => {
writeEscape("K"); // erase the whole line
process.stdout.write("waiting")
await waitFor(1000)
process.stdout.write(".")
await waitFor(1000)
process.stdout.write(".")
await waitFor(1000)
process.stdout.write(".")
moveLeft(10) // "waiting".length = 7, "...".length = 3
await waitFor(1000)
printWaiting()
}
printWaiting();
我使用过async / await函数......但是setTimeout只能用...