javascript - readline 不暂停或允许输入

标签 javascript node.js readline

这是我的代码:

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/

相关文章:

javascript - 更改类的多个元素的类名

javascript - 无法使用 NodeJS/Socket.io 在 HTML 文件中检索简单的广播消息

node.js - 将 node_modules/.bin 放在 WebStorm 的 PATH 上的正确方法

c++ - 为什么第一次调用 readline() 会减慢对 fnmatch() 的所有后续调用?

javascript - fullcalendar 选择时间未正确显示

javascript - Dojo promise 一切——但这需要等待所有 promise 的返回

swift - 为什么每次我尝试让用户在 Swift 中输入整数时,Xcode 都会让我在变量后面加上 "!"

php - 如何在 PHP 中为用户输入提供默认值?

javascript - 单击和模糊时的 Angular js

javascript - 访问其他文件中的 Lambda 上下文对象