[英]How to get JavaScript console user input working (node.js)?
這是我的一些功課。 我希望它讀取用戶輸入,然后創建兩個對象,並根據用戶輸入為其提供值。 這是我的代碼,從JS文件的頂部開始:
console.log("Type 'help' for commands");
console.log("Square numbers:");
console.log("Enter player 1 name");
var player1 = new Player(readLine());
var player2 = new Player(readLine());
console.log("logging name after making players" + player1.name);
function readLine() {
var inputText;
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("Enter player name? ", function(answer) {
inputText = answer;
console.log("Player name:", answer);
rl.pause();
});
return inputText;
}
這是我得到的輸出: http : //oi60.tinypic.com/9tn7nn.jpg
我已經習慣了C#和Java,在那些語言中,readline()會等待輸入然后用我輸入的任何內容創建對象,然后再轉到下一行。 不在JS中! 它只是繼續,在我輸入任何內容之前調用readline()兩次(因此打印“prompt>”兩次)然后記錄播放器1的名稱(在輸入之前,因此未定義)。 然后它等待我輸入內容,一旦我輸入內容,它會將兩個玩家設置為一個名稱,然后結束程序。
是否有可能做我想做的事情? 是否有另一種方法可以讓輸入工作而不跳過它並運行其余的代碼?
提前致謝!
您對JavaScript做了幾個不正確的假設。 主要問題是rl.question(...)
向用戶顯示提示,但是它無法阻止JS線程本身,所以你的readline()
函數會立即退出而undefined
因為function(answer)
沒有因為用戶尚未輸入任何內容而運行。 構建代碼的簡單方法是:
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.write("Type 'help' for commands\n");
rl.write("Square numbers:\n");
function createPayer(number, callback){
rl.question("Enter player " + number + " name? ", function(answer) {
var player = new Player(answer);
// Call the callback function once the player is created.
callback(player);
});
}
createPayer(1, function(player1){
createPayer(2, function(player2){
console.log("logging name after making players" + player1.name);
console.log("logging name after making players" + player2.name);
// Then call player logic you have from in here.
});
});
關鍵是這里沒有任何明確的“等待”。 JS代碼主要基於事件和回調,因此您不必等待用戶輸入內容,而是將一個函數排隊,以便在輸入內容后調用。
僅剩下一個:
該readline
對模塊的NodeJS已更名為linebyline
。
還有一個漂亮的節點模塊,用於節點js的控制台輸入,稱為prompt
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.