Функция с readline запускается для цикла перед получением ответа (Node.Js) - PullRequest
0 голосов
/ 20 ноября 2018

, когда я хочу создать программу, которая выводит подсказки в зависимости от того, сколько хочет пользователь.У меня есть подсказки и входные данные, проблема в том, что при запуске цикла 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 голосов
/ 20 ноября 2018

readline является асинхронным, поэтому вы не должны использовать цикл.

Вызовите ask из ansCheck после правильного ответа, так же, как вы делаете для неверного ответа, но увеличьте счетчик там ипрекратите звонить, когда counter> = numSongs.

Другое решение - обещать ask и использовать async/await в цикле.

...