这是我的代码:
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()
只是让我可以看到哪些代码被评估,哪些没有)
这只会一遍又一遍地返回 What do you want me to do?2
。它还不允许我在控制台中输入任何内容。
我该如何解决这个问题?我找遍了,什么也没找到。
最佳答案
while (true)
确实会创建一个无限循环(除非你打破它)。 input.question()
将回调函数作为参数,只有在您提交答案时才会执行。它是异步。在等待您的回答时,您的循环会不断运行。
我猜您想在再次运行循环之前等待答案。您可以通过使用函数包装该代码并从回调内部调用该函数来实现此目的。
如果您输入再问我
作为答案,下面的示例将循环。否则它将停止:
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();
关于javascript - readline 不暂停或允许输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65374880/