【问题标题】:readline not pausing for or allowing inputreadline 没有暂停或允许输入
【发布时间】:2021-03-30 03:51:36
【问题描述】:

这是我的代码:

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()s 只是为了让我可以看到哪些代码被评估,哪些不是) 这只是一遍又一遍地返回What do you want me to do?2。它也不允许我在控制台中输入任何内容。

我该如何解决这个问题?我找遍了,没有找到任何东西。

【问题讨论】:

    标签: javascript node.js readline


    【解决方案1】:

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      相关资源
      最近更新 更多