Javascript 输入玩家数量,然后使用数字创建玩家数组? var n var玩家=[] var rl=readline.createInterface(process.stdin,process.stdout); rl.问题(“输入玩家数量”,功能(答案){ //使用玩家数量生成玩家名称数组 for(n=0;n

Javascript 输入玩家数量,然后使用数字创建玩家数组? var n var玩家=[] var rl=readline.createInterface(process.stdin,process.stdout); rl.问题(“输入玩家数量”,功能(答案){ //使用玩家数量生成玩家名称数组 for(n=0;n,javascript,loops,for-loop,input,while-loop,Javascript,Loops,For Loop,Input,While Loop,直到“输入播放器1的名称”,该代码存储的值。 代码不会提示其他玩家。为什么? 我还尝试用“for”循环替换为“while”循环,但结果更糟。 它甚至没有开始提示输入玩家1的名字。为什么会这样?谢谢你的帮助:)谢谢大家 var n var players = [] var rl = readline.createInterface(process.stdin, process.stdout); rl.question("Enter number of players ", function(a

直到“输入播放器1的名称”,该代码存储的值。 代码不会提示其他玩家。为什么?

我还尝试用“for”循环替换为“while”循环,但结果更糟。 它甚至没有开始提示输入玩家1的名字。为什么会这样?谢谢你的帮助:)谢谢大家

var n
var players = []

var rl = readline.createInterface(process.stdin, process.stdout);

rl.question("Enter number of players ", function(answer) {
    //Use number of players to generate array of player names

for (n = 0; n < parseInt(answer); n++) {
    var playerNumber = n + 1
    rl.question("Enter name of player " + playerNumber, function(answer) {
        players.push(answer)});
// stops prompting after asking for name of player 1?
    }

});
    rl.close;
rl.on('close', function(){

console.log("The players are: " + players.toString());
});
var readline=require('readline');
变量n
var玩家=[]
var rl=readline.createInterface(process.stdin,process.stdout);
rl.问题(“输入玩家数量”,功能(答案){
//使用玩家数量生成玩家名称数组
while(n
编辑:尝试将rl.close移出循环。问题仍然是一样的,这是我的控制台中显示的:

输入玩家数量

(投入)4

输入玩家1的名字

(输入)播放器1


(控制台停止提示,当我尝试添加更多名称并结束进程时,数组仅存储播放器1的名称。)

您可以使用递归和回调来解决此问题:

var readline = require('readline');
var n
var players = []

var rl = readline.createInterface(process.stdin, process.stdout);

rl.question("Enter number of players ", function(answer) {
    //Use number of players to generate array of player names

while (n < parseInt(answer)) {
    var playerNumber = n + 1
    rl.question("Enter name of player " + playerNumber, function(answer) {
        players.push(answer)});
    n++;
// does not even start prompting name of player 1?
    }

});
rl.close;
rl.on('close', function(){

console.log("The players are: " + players.toString());
});

这里,当readPlayers结束递归条件满足时,rl.close只被调用一次。

@Jake虽然循环通常会阻塞整个主线程,直到它们完成(同步),但Martin几乎创建了一个递归函数,可以在不阻塞整个主线程的情况下执行您想要的操作。@Jake,我在rl.close之后调用return以结束递归函数调用(防止运行
rl.question(“输入播放器名称”…
block)。不。break在循环中使用。如果你想“break”一个函数,你必须调用“return”@Jake不。实际上,你希望它是同步的(而不是阻塞线程)。我很好奇是什么导致了你的问题,做了一些测试,一切都很好。我可以看到你的代码(Jake)没有调用
rl.close()
。你忘记了“()”.总之,祝你愉快。哦,我犯了一个错误,它不是异步的,但我认为是异步的。基于while循环阻塞主线程这一事实,但正如前面提到的,我做了一些测试,发现一切都很好。
const readline = require('readline');

var n
var players = []

var rl = readline.createInterface(process.stdin, process.stdout);

function readPlayers(playerCount, playerArr, curr = 0) {
    if (playerCount == curr) {
        rl.close();
        return;
    }

    rl.question("Enter name of player " + (curr + 1) + ": ", function (playerName) {
        playerArr.push(playerName)
        readPlayers(playerCount, playerArr, curr + 1);
    });
}

rl.question("Enter number of players: ", function (answer) {
    //Use number of players to generate array of player names

    readPlayers(parseInt(answer), players);
});

rl.on('close', function () {
    console.log("The players are: " + players.toString());
});