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

时间:2018-11-20 07:14:59

标签: 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){
    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);
    }
}

如果用户输入5,则输出为:

Do you like pie [Y/N]? Do you like pie [Y/N]? Do you like pie [Y/N]? Do you like pie [Y/N]? Do you like pie [Y/N]? 

我需要的输出是:

Do you like pie [Y/N]? 
  

等待答案...
输入答案,请检查答案...
检查答案,并进行无关的操作...
在需要时重复。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

readline是异步的,因此您不应使用循环。

在收到有效回复后从ask调用ansCheck,就像您为无效答案所做的一样,但是要增加计数器并在计数器> = numSongs时停止调用。

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