readline 不暂停或允许输入

readline not pausing for or allowing input

这是我的代码:

readline = require("readline");
input = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
while (true) {
    input.question("What do you want me to do?", answer => {
        console.log("1");
        //do stuff with answer
        input.close();
    });
    console.log("2");
}

console.log() 只是为了让我可以看到哪些代码被评估,哪些没有) 这只是 returns What do you want me to do?2 一遍又一遍。它还不允许我在控制台中输入任何内容。

我该如何解决这个问题?我找遍了,什么也没找到。

while (true) 确实会创建一个无限循环 (除非你打破它)input.question() 将回调函数作为参数,只有在您提交答案时才会执行。它是 异步的 。在等待您的回答时,您的循环会一遍又一遍地保持 运行。

我猜您想在 运行 再次循环之前等待答案。您可以通过用函数包装该代码并从回调内部调用该函数来实现。

如果您键入 ask me again 作为答案,以下示例将循环。否则它将停止:

readline = require("readline");
input = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

(function loop() {
  input.question("What do you want me to do?", (answer) => {
    const askAgain = answer === "ask me again";

    if (askAgain) loop();
    else input.close();
  });
})();

注意它用 (function loop() {})(); 包裹的方式。那是一个 IIFE(立即调用的函数表达式)。相当于这样做:

function loop() {}
loop();