Node.js函数编程实践求助:输入与比较功能实现问题
Hey there! Let's break down this problem step by step, since you mentioned having trouble connecting the input logic and getting your code to run properly. I'll walk through each requirement with concrete examples, then put it all together into a working program.
Clarifying the Requirements First
Let's make sure we're aligned on what each part needs to do:
Inputfunction: Takes a label string (like "1st" or "2nd"), displays a full prompt to the user, and returns the entered integer value.biggerfunction: Takes two integers, compares them, and returns one of three specific result strings.- Main logic: Use the two functions to collect user input, run the comparison, and output the final result.
Key Node.js Input Detail You Might Miss
Unlike browser JavaScript, Node.js doesn't have a built-in prompt() function. We'll use the core readline module to handle user input, and since input is asynchronous, we'll wrap it in a Promise to keep the code clean and easy to use.
1. Implementing the Input Function
This function will create a Promise that resolves with the user's input (converted to an integer) once they enter a value. We'll build the full prompt using the input label you pass in:
const readline = require('readline'); // Set up the readline interface for input/output const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); function Input(label) { return new Promise((resolve) => { const promptMessage = `Please enter ${label} integer: `; rl.question(promptMessage, (userInput) => { // Convert the input string to an integer and resolve the promise resolve(parseInt(userInput, 10)); }); }); }
2. Implementing the bigger Function
This is straightforward conditional logic—just compare the two integers and return the matching result string:
function bigger(first, second) { if (first > second) { return "1st number is bigger"; } else if (second > first) { return "2nd number is bigger"; } else { return "The 2 numbers are equal"; } }
3. Putting It All Together in Main Logic
Since our Input function returns a Promise, we'll use an async function for the main logic to wait for user input before proceeding:
async function main() { // Get the two integers from the user const first = await Input("1st"); const second = await Input("2nd"); // Run the comparison and get the result const result = bigger(first, second); // Output the final message console.log(result); // Close the readline interface to let the program exit rl.close(); } // Start the program main();
Testing the Code
When you run this with node your-file-name.js, you'll see interaction like this:
Please enter 1st integer: 7
Please enter 2nd integer: 7
The 2 numbers are equal
Try different values to verify all three result cases work as expected.
Common Mistakes to Avoid
- Skipping async/await: If you don't use
awaitwithInput(), you'll get a Promise instead of the integer value—this is probably why your input wasn't connecting properly. - Forgetting to close the readline interface: Without
rl.close(), the program will hang after outputting the result instead of exiting. - Not converting input to integer: User input comes as a string, so
parseInt()is essential for accurate numeric comparison.
内容的提问来源于stack exchange,提问作者frostergale

