出现提示时,是否可以使用查询器中的先前答案?

Ari*_*nik 5 javascript yo inquirer

因此,我想做的是在进一步询问问题时使用先前的答案。基本上,这样我可以显示将要创建的内容的摘要并要求进行验证。

this.prompt([   
    {
      type: 'input',
      name: 'name',
      message: 'What is your name?'
      default: 'Jake'
    },
    {
      type: 'confirm',
      name: 'summary',
      message: 'Is this information correct? Your name is:' + answers.name',
    }
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法可以做到这一点?还是实现列出所有先前答案的摘要类型事物的另一种方式?

小智 7

任一巢查询者调用:

inquirer
  .prompt({
    type: 'list',
    name: 'chocolate',
    message: "What's your favorite chocolate?",
    choices: ['Mars', 'Oh Henry', 'Hershey']
  })
  .then(() => {
    inquirer.prompt({
      type: 'list',
      name: 'beverage',
      message: 'And your favorite beverage?',
      choices: ['Pepsi', 'Coke', '7up', 'Mountain Dew', 'Red Bull']
    });
  });
Run Code Online (Sandbox Code Playgroud)

或者使用该when功能。

{
  type: 'confirm',
  name: 'summary',
  message: 'Is this information correct? Your name is:' + answers.name,
  when: function( answers ) {
    // Only run if user set a name
    return !!answers.name;
  },
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为第二个选项会导致“答案未定义”错误。 (3认同)
  • @DanielRuf我已经尝试了第二个选项,但我似乎无法在when函数之外访问答案。我还访问了链接以及https://github.com/SBoudrias/Inquirer.js/,似乎这些示例仅使用when作为布尔值,而不是将“answers”值传递回提示代码例如。如上面消息中的answers.name。我不确定这是否是因为自您发布帖子以来代码/材料已更改。您能否建议这是否仍然可能? (2认同)

Tia*_*Shi 6

就我而言,丹尼尔的回答不适用于询问者 7。解决方法可以是将大提示分成几个,并使用匿名async函数包装它们。这将永远是安全的。

const inquirer = require("inquirer");

(async () => {
  const ans1 = await inquirer.prompt([
    {
      type: "input",
      name: "name",
      message: "What is your name?",
      default: "Jake",
    },
  ]);
  const ans2 = await inquirer.prompt([
    {
      type: "confirm",
      name: "summary",
      message: "Is this information correct? Your name is:" + ans1.name,
    },
  ]);
  return { ...ans1, ...ans2 };
})()
  .then(console.log)
  .catch(console.error);
Run Code Online (Sandbox Code Playgroud)

这将记录:

{ name: 'Foo bar', summary: true }
Run Code Online (Sandbox Code Playgroud)