我已经构建了一个在控制台中显示菜单的菜单:
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
menu.question('Where to go? ', function(input) {
switch(input) {
case '1': const something = doConfiguration();
showMain(); break;
case '2': process.exit(); break;
default: showMain() /* show menu again if input does not match */;
}
});
}
doConfiguration 是从另一个运行 getUserInputConfiguration 的控制器导入的函数。该函数使用询问器询问一些问题(使用询问器.提示)。效果很好。
async function doConfiguration() {
try {
const answers = await getUserInputConfiguration(chalk,inquirer);
// do something
return true;
} catch (error) {
console.log('Error:', error);
}
return false;
}
但是如果我在 doConfiguration() 之后运行放置代码
case '1': const something = doConfiguration();
showMain();
它立即运行它。我尝试使用await doConfiguration();但这是不允许的并且会引发错误:
语法错误:await 仅在异步函数和模块的顶层主体中有效
我怎样才能暂停代码直到 doConfiguration 返回?我想不通。