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

如何暂停代码直至异步函数doConfiguration返回结果?

解决方案

问题出在menu.question的回调函数不是异步函数,导致你无法在里面使用await。只需要把回调改成async函数,就能正常等待doConfiguration执行完成后再调用showMain。

修改后的showMain函数关键部分代码:

async function showMain() {
    process.stdout.write('\033c');

    // Log the menu
    console.log(
        'Main menu\n\n' +
        '1 = A configuration\n' +
        '2 = B configuration\n' +
        '4 = Exit'
        );

    // Check if there is already a menu active. If true, close it.
    if(menu) menu.close();

    //Creates a readline Interface instance
    menu = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });

    // Ask question - 将回调改为async函数
    menu.question('Where to go? ', async function(input) {
        switch(input) {
            case '1': 
                const something = await doConfiguration();
                showMain(); 
                break;
            case '2': 
                process.exit(); 
                break;
            default: 
                showMain(); /* show menu again if input does not match */;
        }
    });
}

原理说明

  • doConfiguration是异步函数,直接调用会返回一个Promise,不会等待函数内部逻辑执行完成,所以原来的代码里showMain会立刻运行。
  • 将menu.question的回调声明为async函数后,就可以在回调内部使用await关键字,等待doConfiguration的Promise状态变为已完成,之后再执行showMain。

内容的提问来源于stack exchange,提问作者Finduilas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:42:36