Tekens wissen die in de console zijn afgedrukt

Ik heb gezocht hoe ik het in andere talen moet doen en ik heb ontdekt dat ik het speciale teken \b moet gebruiken om het laatste teken te verwijderen. (how-do-i-erase-printed-characters -in-a-console-applicationlinux)

Dit werkt niet voor node.js in meerdere oproepen naar console.log ();

Als ik een enkel logboek schrijf:

console.log ("abc\bd");

Ik krijg het resultaat: abd

Maar als ik schrijf:

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

Ik krijg het resultaat:

abc
d

Mijn doel is om een ​​wachtend bericht af te drukken zoals:

Wachten
Wachten.
Wachten..
Wachten…

en nogmaals:

Wachten
Wachten.
enz.

allemaal in dezelfde regel.


Antwoord 1, autoriteit 100%

Er zijn functies beschikbaar voor 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);

Het is mogelijk om argumenten te geven aan clearLine(direction, callback)

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

Update13 december 2015: hoewel de bovenstaande code werkt, is deze niet langer gedocumenteerd als onderdeel van process.stdin. Het is verplaatst naar readline


Antwoord 2, autoriteit 14%

De gemakkelijkste manier om dezelfde regel te overschrijven is

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

de \ris de sleutel. Het zal de cursor terug naar het begin van de regel verplaatsen.


Antwoord 3, autoriteit 14%

Je zou nu de readlinebibliotheek en de APIom dit te doen.


Antwoord 4, autoriteit 2%

Dit werkt voor mij:

process.stdout.write('\033c');
process.stdout.write('Your text here');

Antwoord 5

Een koetsretour gebruiken

Het regelterugloopteken plaatst de cursor terug aan het begin van de huidige regel.

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

Deze oplossing werkte voor mij — ik heb hem alleen getest met een enkel teken.


Antwoord 6

Probeer door de \r aan het begin van de string te verplaatsen, dit werkte voor mij in Windows:

for (var i = 0; i < 10000; i+=1) {
    setTimeout(function() {
        console.log(`\r ${i}`);
    }, i);
}

Other episodes