使用Async/Await改写Node.js Promise控制台输入代码遇无输出问题
用Async/Await实现Node.js控制台输入的问题解决
你的代码没有输出的核心原因是prompt函数没有返回Promise对象,await只能等待Promise完成,而原函数在异步回调执行前就返回了未赋值的name(值为undefined),导致后续逻辑出错。
正确的实现代码
const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }); let quest = "What is your name?"; function prompt(question) { // 将readline的异步逻辑包裹进Promise return new Promise((resolve, reject) => { readline.question(`${question} `, result => { readline.close(); resolve(result); }); }); } (async function () { let a = await prompt(quest); console.log("Hi - " + a); }())
关键修改点说明
- 让
prompt返回Promise:把readline.question的异步操作包裹在Promise中,当用户输入完成后,通过resolve(result)把输入值传递出去。 await正确等待异步操作:await prompt(quest)会暂停异步函数,直到Promise被resolve,拿到用户输入的结果后再执行后续的console.log,确保输出正确内容。
原代码的问题分析
原prompt函数中,readline.question是异步执行的(回调函数在用户输入后才触发),但函数会先执行return name,此时name还未被赋值,返回的是undefined。await undefined会直接解析为undefined,所以console.log(a)输出的是undefined,而非你期望的用户输入内容。
内容的提问来源于stack exchange,提问作者Dr.z01dberg
相关产品推荐
相关产品推荐

