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

如何使用inquirer.js的when方法优化多分支逻辑并实现菜单返回功能

inquirer.js 代码优化方案

下面的优化方案可以同时满足你提出的两个核心需求,同时删除冗余的if分支和嵌套回调,代码可维护性更高:

const inquirer = require('inquirer');
// 你的钱包数据
const wallet = {
  1: {/* 钱包1信息 */},
  2: {/* 钱包2信息 */},
  3: {/* 钱包3信息 */}
}

// 封装主菜单为可重复调用函数,实现退出后返回初始页面的需求
function mainMenu() {
  inquirer.prompt([
    // 主菜单选项
    {
      type: 'list',
      message: "Select an option",
      name: 'walletOptions',
      choices: [
        'Wallet',
        'Normal Transaction',
        'Arbitrage'
      ]
    },
    // 账户选择选项,只有用户选了Wallet才会展示
    {
      type: 'list',
      message: "Select an account",
      name: 'accountOptions',
      choices: [
        '1',
        '2',
        '3',
        '<<< Quit'
      ],
      // 核心:when配置项控制当前问题是否展示
      when: (answers) => answers.walletOptions === 'Wallet'
    }
  ]).then(answers => {
    const { walletOptions, accountOptions } = answers;

    // 账户操作映射表:替代if分支匹配账户逻辑
    const accountActionMap = {
      '1': () => console.log(wallet[1]),
      '2': () => console.log(wallet[2]),
      '3': () => console.log(wallet[3]),
      '<<< Quit': () => mainMenu() // 点击退出直接重调主菜单,回到初始页
    }

    // 主菜单操作映射表:替代if分支匹配主选项逻辑
    const mainActionMap = {
      'Wallet': () => accountActionMap[accountOptions](),
      'Normal Transaction': () => {
        const mainswap = require("./mainswap");
        mainswap.deploy();
      },
      'Arbitrage': () => {
        // 原有套利逻辑
      }
    }

    // 执行对应逻辑
    mainActionMap[walletOptions]();
  })
}

// 初始化启动主菜单
mainMenu();

关键逻辑说明

  • .when配置使用:第二个询问项的when函数接收当前已收集的所有答案作为参数,返回布尔值控制当前询问是否展示,完美适配选择Wallet才展示账户列表的需求,无需手动嵌套prompt
  • 分支逻辑优化:用对象映射表替换所有if/else分支,后续新增选项只需要在对应映射表中添加键值对即可,无需修改分支判断逻辑
  • 返回初始页实现:主菜单封装为独立函数,用户点击<<< Quit时直接重新调用该函数即可回到初始菜单状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:06:08