You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:18:12