javascript - 在node js中,如何使用询问器创建提示循环?

标签 javascript node.js

出于某种原因,npm 查询器会爆炸 while 循环而不提示用户问题。我能想到的唯一方法(干净地)是使用如下所示的开关将其投入使用:

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');

问题是,我不想通过调用自身内部的函数来在调用堆栈上创建泄漏。

最佳答案

您绝对走在正确的道路上。我在不同的 Node 模块中创建了询问器子菜单,以便可以从任何提示菜单中调用它们。我还有我的主菜单,因为它是自己的模块,因此可以从任何子菜单中的任何位置调用它。

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

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 文件的样子:

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;

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

关于javascript - 在node js中,如何使用询问器创建提示循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45060200/

相关文章:

javascript - 如何控制复制到剪贴板的文本

javascript - 增量更改作为变量运行的每个函数

javascript - 渲染 dust.js 模板时出现 TypeError

node.js 配置 npm - NODE_CONFIG_ENV

javascript - 大型应用程序的 Node.js 可靠性

javascript - Node JS 请求和 Cheerio HTML 页面错误

javascript - 如何在 TypeScript 中实现 clone() 方法?

javascript - 使用 ionic 框架的 $cordova ImagePicker 插件时出现错误

javascript - 这个 "object expected"JavaScript 错误怎么可能发生?

javascript - 如何在 Jasmine 测试中放入调试器?