如何暂停代码直至异步函数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
相关产品推荐
相关产品推荐

