首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在节点js中,如何使用inquirer创建提示循环?

在节点js中,如何使用inquirer创建提示循环?
EN

Stack Overflow用户
提问于 2017-07-12 22:15:59
回答 1查看 2.4K关注 0票数 1

出于某些原因,npm inquirer会在没有提示用户问题的情况下快速通过while循环。我能想到的唯一方法(干净利落地)是把它放入函数中,开关如下:

代码语言:javascript
复制
function callMenu (selection){
  switch (selection){
    case 'main':
        //Use inquirer to show main menu and set selection = 'selection1' or selction = 'selection2'
        callMenu(selection);
        break;
    case 'selection1':
        //Use inquirer to show selection1 second level menu then go back to main menu
        callMenu('main');
        break;
    case 'selection2':
        //Use inquirer to show selection2 second level menu then go back to main menu
        callMenu('main');
        break;
   }
}
callMenu('main');

问题是,我不想通过在函数本身中调用函数来在调用堆栈上造成泄漏。

EN

回答 1

Stack Overflow用户

发布于 2018-12-31 07:14:03

你绝对是在正确的轨道上。我在不同的节点模块中创建了查询器子菜单,以便可以从任何提示菜单调用它们。我也有我的主菜单作为它自己的模块,所以它可以从任何地方在任何子菜单中调用。

所以这是我的mainMenu.js文件的样子:

代码语言:javascript
复制
const menu = () => {
  inquirer
    .prompt([{
      type: 'input',
      name: 'menu',
      message: "Type 'Menu' or hit enter to see the menu. Type in a player's name to search for a player."
    }]).then(answer => {
      answer.menu === '' ? subMenu.subMenu() :
        answer.menu.toLowerCase().trim() === 'menu' ? subMenu.subMenu() :
        tools.quickNameLookup(answer.menu);
    });
}

module.exports.menu = menu;

下面是我的subMenus.js文件的样子:

代码语言:javascript
复制
const subMenu = () => {
  inquirer
    .prompt([{
      type: 'list',
      name: 'subMenu',
      message: 'Welcome to the MLB stats app. What would you like to do?',
      choices: ['Roster Search Menu', 'Player Search Menu', 'Player Statistics Menu', 'Leaderboards', 'Reports Menu', 'Back']
    }]).then(submenu => {
      let currentMenu = Object.keys(submenu)[0];
      switch (submenu.subMenu) {
        case 'Roster Search Menu':
          rosterMenu.rosterSearchPrompt(currentMenu);
          break;
        case 'Player Search Menu':
          playerSearchMenu.playerSearchPrompt(currentMenu);
          break;
        case 'Player Statistics Menu':
          statisticsMenu.statsSearchPrompt(currentMenu);
          break;
        case 'Reports Menu':
          reportsMenu.reportsPrompt(currentMenu);
          break;
        case 'Leaderboards':
          leaderboardsMenu.leaderboardsPrompt();
        case 'Back':
          menu.menu();
          break;
      }
    });
};

module.exports.subMenu = subMenu;

适用于输入提示,但我更喜欢在可能的情况下使用列表,以避免用户错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45060200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档