当我想制作一个程序时,它会根据用户想要的数量进行提示。我已经找到了提示和输入,问题是当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]?
等待答案...
输入答案,请检查答案...
检查答案,并进行无关的操作...
在需要时重复。
>
感谢您提供的任何帮助。
答案 0 :(得分:1)
readline是异步的,因此您不应使用循环。
在收到有效回复后从ask
调用ansCheck
,就像您为无效答案所做的一样,但是要增加计数器并在计数器> = numSongs时停止调用。
另一种解决方案是承诺ask
,并在循环中使用async/await
。