【问题标题】:User input function not working correctly?用户输入功能无法正常工作?
【发布时间】:2021-02-02 20:59:19
【问题描述】:

在我的 Node.js 程序中,我有 2 个用户输入函数。出于某种原因,它一直跳到第二个并执行它,然后完成。它甚至不执行第一个用户输入功能。我不确定为什么会这样,我一直在试图弄清楚,但我什么也没得到。我真的很感激你们可能有的任何反馈!我附上了我的代码的要点。谢谢大家!

var user_answer;
var user_answer2;
const readline = require("readline"); // For user-input
const user_input = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

const fetch = require('node-fetch');
const url = //insert url 
  const headers = {
    //insert headers
  }
const body = {
  //insert body info
}

fetch(url, {
    method: 'POST',
    headers: headers,
    body: body
  })
  .then((res) => {
    return res.json()
  })
  .then((json) => {
    user_input.question("Asking question here: ", function(user_answer) { //1ST USER INPUT FUNCTION 
      for ( /* insert for-loop conditions here */ ) {
        //insert code to print stuff out during for-loop

      }
      user_input.close();
    });
  });
  
user_input.question("How are you? ", function(user_answer2) { //2ND USER INPUT FUNCTION 
  if (user_answer2 == 0) {
    console.log('hi');
    user_input.close();
  }
});

user_input.on("close", function() {
  process.exit(0);

});

【问题讨论】:

    标签: javascript node.js user-input


    【解决方案1】:

    第一个问题异步发生,因此将在第二个同步操作的问题之后发生 - 不幸的是,第一个问题永远没有机会,因为第二个问题在它有机会之前就关闭了一切。

    您可以使用如下所示的 Async/Await 解决您的困境并使您的代码更具可读性。

    现在问题将按照您想要的顺序触发。

    如果您希望触发这两个问题,请不要在单击第一个问题的关闭按钮时调用 process.exit(0)。

    (async() => {
      const resp = await fetch(...);
      const json = await resp.json();
      user_input.question("Asking question here: ", function(user_answer) {}  );
      user_input.question("How are you? ", function(user_answer2) {});
      user_input.on("close", function() {
        process.exit(0);
      });
    })();
    

    【讨论】:

    • 嘿@RandyCasburn,谢谢你的建议!不过,我有一个后续问题,如果可以的话。执行 '(async() => {........}();' 时,我收到 '(async()' 部分的错误,并显示 'TypeError: {(intermediate value )} 不是函数'。你知道为什么会这样吗?我真的很感谢你的帮助,非常感谢!
    • 如果那是您的代码,那么您最后会缺少)。模式是 ( ()=>{} )(); 或 ( ()=> () ); - 任何一种方式都有效。
    • 我按照您在评论中的说明进行了操作,但由于某种原因我仍然收到该错误(我仔细检查了括号和括号,似乎都是配对的!)谢谢。跨度>
    • 确保您在语句的末尾没有遗漏任何分号。这也很常见。
    猜你喜欢
    • 2017-09-23
    • 2013-11-06
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多