簡體   English   中英

如何使JavaScript控制台用戶輸入工作(node.js)?

[英]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

有關linebyline的更多信息,請訪問

還有一個漂亮的節點模塊,用於節點js的控制台輸入,稱為prompt

獲取更多信息以獲取提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM