Javascript 带有readline的函数在获得响应(Node.Js)之前在for循环中运行

Javascript 带有readline的函数在获得响应(Node.Js)之前在for循环中运行,javascript,node.js,for-loop,readline,Javascript,Node.js,For Loop,Readline,当我想制作一个程序,根据用户需要的数量进行提示时。我已经找到了提示和输入,问题是当for循环运行时,它会多次询问这个问题,而不是等待响应。我的代码: function mainLoop(auth, num){ var i; for (i = 1; i <= numOfPrompts; i++){ ask(auth); //Create the prompts (unrealated) } } function ask(auth){

当我想制作一个程序,根据用户需要的数量进行提示时。我已经找到了提示和输入,问题是当for循环运行时,它会多次询问这个问题,而不是等待响应。我的代码:

function mainLoop(auth, num){
    var i;
    for (i = 1; i <= numOfPrompts; i++){
        ask(auth);
        //Create the prompts (unrealated)
    }
}

function ask(auth){
    const r3 = readline.createInterface({
        input: process.stdin,
        output: process.stdout,
    });
    r3.question("Do you like pie [Y/N]? ", (ans) => {
        ansCheck(auth, ans);
    });
}

function ansCheck(auth, ans){
    if (ans == "y" || ans == "yes"){
        variable = true;
    }else if (ans == "n" || ans == "no"){
        variable = false;
    }else{
        console.log("Invalid answer\n");
        ask(auth);
    }
}
我需要输出为:

Do you like pie [Y/N]? 
等待答案…输入答案,检查答案…检查答案,做不相关的事情…需要时重复


感谢您提供的帮助。

读线是异步的,因此不应使用循环

在收到有效响应后,从ansCheck调用ask,就像您对无效答案所做的那样,但在计数器>=numSongs时增加计数器并停止调用

另一种解决方案是promisify ask,并在循环中使用async/await

Do you like pie [Y/N]?