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();
这是我的代码:
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();