繁体   English   中英

我想在 Node Js 中使用 Readline 从用户那里获取一些输入。 而且我不知道在哪里打电话给 function

[英]I want's to take some input from user using Readline in Node Js. And I don't Know where to call the function

我是一个完整的初学者。 因此,在 Stack Overflow 中,我找到了“如何使用 ReadiLine 获取多个输入,但我找不到如何应用这个 function 的解决方案,我把它放在主 function 上,它接受了我的输入,但它不起作用&我的 Output 显示 NaN。谁能帮我解决这个问题..

这是我的代码..

    function simpleInterest (money, rate, time) {
    simpleInterest=money*rate*time;
    return simpleInterest;
}

let money;
let rate;
let time;

'use strict'

const readline = require('readline')

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
})

const question1 = () => {
  return new Promise((resolve, reject) => {
    rl.question('Total Money: ', (money) => {

      resolve()
    })
  })
}

const question2 = () => {
  return new Promise((resolve, reject) => {
    rl.question('Interest Rate: ', (rate) => {

      resolve()
    })
  })
}
const question3 = () => {
  return new Promise((resolve, reject) => {
    rl.question( 'How Many Years: ', (time) => {
   
      resolve()
    })
  })
}

const main = async () => {
  await question1()
  await question2()
  await question3()
  //Here I'm calling the Function
  let profit= simpleInterest(money, rate, time)
    console.log("total", profit)
    rl.close()
}

main()

你错过了承诺难题的几个关键部分。 resolve()接受一个可选参数,这是 promise 应该解析到的值。 如果没有参数,promise 将解析为未定义。 例如,从语法上讲,这看起来像resolve(money)

第二步是将解析的 promise 的值分配给变量或在表达式中使用它。 例如const money = await question1()

可以通过分配给您从回调创建的全局变量来解决这些步骤,但我更喜欢使用将事情保持在本地范围内的 Promise。

另一个容易忽略的细微差别是用户输入作为字符串返回。 您可以使用+将这些字符串转换为数字。

作为一种优化,您实际上有 3 次具有不同变量名称的相同代码。 这表明将逻辑抽象为 function 的潜在机会,您可以使用不同的参数调用它,避免重复。

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

const ask = msg => new Promise(resolve => 
  rl.question(msg, response => resolve(response))
);

const simpleInterest = (money, rate, time) =>
  money * rate * time
;

const main = async () => {
  const money = await ask("Total Money: ");
  const rate = await ask("Interest Rate: ");
  const time = await ask("How Many Years: ");
  console.log(simpleInterest(+money, +rate, +time));
  rl.close();
};

main();

现在,还没有添加错误处理,因此您可能需要编写一个循环来不断提示,直到用户输入一个数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM