2013-10-30 11 views
7

Ich brauche eine Funktion, die die Ausführung des Skripts anhalten wird, bis eine Taste gedrückt wird. Ich habe versucht:Drücken Sie eine beliebige Taste, um fortzufahren in nodejs

var stdin = process.openStdin(); 
require('tty').setRawMode(true);  

stdin.on('keypress', function (chunk, key) { 
    process.stdout.write('Get Chunk: ' + chunk + '\n'); 
    if (key && key.ctrl && key.name == 'c') process.exit(); 
}); 

aber es hört nur für einen Tastendruck und nichts passiert. Das Programm wird nicht weiter ausgeführt.

Wie kann ich die Ausführung anhalten?

+0

Haben Sie diese Funktion in einer Schleife? Versuchen Sie auch nur synchrone Funktionen oder asynchrone Funktionen zu pausieren? – EmptyArsenal

+1

Sie können die Ausführung von Skripten, die im Hintergrund ausgeführt werden, nicht anhalten. Aber ich glaube nicht, dass das der Punkt ist, du musst den Prozess pausieren.stdin/stdout. Sie können sich das [readline] (http://nodejs.org/api/readline.html) Paket ansehen. – user568109

Antwort

11

Werke für mich:

console.log('Press any key to exit'); 

process.stdin.setRawMode(true); 
process.stdin.resume(); 
process.stdin.on('data', process.exit.bind(process, 0)); 
+1

Das funktioniert auch für mich, aber ich habe eine Schleife mit einer Methode, die sich mit einem setTimeout vor Ihrem Code und dieser Schleife ruft es noch ausgeführt wird und schreiben nach 'Drücken Sie eine beliebige Taste, um zu beenden' ... – Aebsubis

+0

Können Sie Ihre Frage posten mit etwas Code? Ich werde froh sein, es zu beantworten, wenn ich kann – vkurchatkin

+10

Dies ist keine Lösung für die Frage, dies tötet das Programm auf einen Tastendruck, war die Frage zu pausieren und dann wieder auf Tastendruck. –

0

Ich habe tatsächlich ein npm Paket paktc genannt, die Ihnen dabei helfen. Wenn Sie das Paket installieren:

> npm install paktc 

Dann würden Sie es wie folgt verwendet werden:

// your console application code here... 

require('paktc') // Press any key to continue... 
+0

Es funktioniert nicht für mich – hellboy

+0

Welcher Teil? Erhalten Sie eine Fehlermeldung oder etwas? Können Sie genauer sein, was nicht funktioniert? Sie können einen Fehler hier einreichen: https://github.com/justinmchase/paktc/issues –

+0

Dies ist 'WebStrom' Konsole Problem – hellboy

2

Die akzeptierte Lösung asynchron für ein Schlüsselereignis wartet und dann beendet, ist es nicht wirklich eine Lösung ist, „Press jeder Schlüssel, um fortzufahren ".

Ich musste beim Schreiben einiger Nodejs Shell-Skripte pausieren. Ich benutzte den spawnSync von child_process mit dem Shell-Befehl "read".

Dies wird grundsätzlich das Skript anhalten und wenn Sie die Eingabetaste drücken, wird es fortgesetzt. Ähnlich wie der Pause-Befehl in Windows.

require('child_process').spawnSync("read _ ", {shell: true, stdio: [0, 1, 2]}); 

Hoffe, das hilft.

1

Dieser Code-Schnipsel macht den Job, wenn Sie nicht wollen, um den Prozess zu beenden:

console.log('Press any key to continue.'); 
process.stdin.once('data', function() { 
    continueDoingStuff(); 
}); 

Es ist async wird so nicht Looping als-ist-- arbeiten, wenn Sie Knoten 7 verwenden sind könnten Sie Wickeln Sie es in ein Versprechen ein und verwenden Sie async/await.

Verwandte Themen