【问题标题】:Yeoman Prompts with Rx Interface带有 Rx 接口的 Yeoman 提示
【发布时间】:2015-05-26 03:13:28
【问题描述】:

我正在尝试编写一个 Yeoman 生成器,但我真的不喜欢用于编写提示的文档化界面。 Reactive Interface 似乎更容易编写分支和循环接口。但是,当我这样写时:

  prompting: function () {
    var prompts = [{ type: 'input',
        name: 'howdy',
        message:'howdy'
      }]; 
    prompts = Rx.Observable.from(prompts);
    this.prompt(prompts, function(answers) { this.log(answers); }.bind(this));

  },  

我收到此错误:

events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: You must provide a `message` parameter
    at Prompt.throwParamError (/Users/user/.nvm/versions/node/v0.12.0/lib/node_modules/yo/node_modules/inquirer/lib/prompts/base.js:88:9)
    at Prompt (/Users/user/.nvm/versions/node/v0.12.0/lib/node_modules/yo/node_modules/inquirer/lib/prompts/base.js:44:10)
    at new Prompt (/Users/user/.nvm/versions/node/v0.12.0/lib/node_modules/yo/node_modules/inquirer/lib/prompts/input.js:25:15)
    at PromptUI.fetchAnswer (/Users/user/.nvm/versions/node/v0.12.0/lib/node_modules/yo/node_modules/inquirer/lib/ui/prompt.js:92:16)
    at MapObserver.selector (/Users/user/.nvm/versions/node/v0.12.0/lib/node_modules/yo/node_modules/inquirer/node_modules/rx/dist/rx.js:4215:20)
    at MapObserver.tryCatcher (/Users/user/.nvm/versions/node/v0.12.0/lib/node_modules/yo/node_modules/inquirer/node_modules/rx/dist/rx.js:568:29)
    at MapObserver.onNext (/Users/user/.nvm/versions/node/v0.12.0/lib/node_modules/yo/node_modules/inquirer/node_modules/rx/dist/rx.js:4423:42)
    at MapObserver.tryCatcher (/Users/user/.nvm/versions/node/v0.12.0/lib/node_modules/yo/node_modules/inquirer/node_modules/rx/dist/rx.js:568:29)
    at AutoDetachObserverPrototype.next (/Users/user/.nvm/versions/node/v0.12.0/lib/node_modules/yo/node_modules/inquirer/node_modules/rx/dist/rx.js:4856:51)
    at AutoDetachObserver.Rx.internals.AbstractObserver.AbstractObserver.onNext (/Users/user/.nvm/versions/node/v0.12.0/lib/node_modules/yo/node_modules/inquirer/node_modules/rx/dist/rx.js:1856:35)

【问题讨论】:

    标签: yeoman


    【解决方案1】:

    我没有通过this.prompt() 使用生成器内置的Inquirer 实例,而是安装了Inquirer 并按照他们的示例进行操作。它完美地工作;除了它重复了第一个提示。

      prompting: function () {
        var done = this.async();
    
        var log = function(answers) { this.log(answers); }.bind(this);
        var complete = function() {
          this.log('complete');
          done();
        }.bind(this);
    
        var prompts = Rx.Observable.create(function(obs) {
          this.log(obs);
          obs.onNext({ type: 'input',
            name: 'howdy',
            message:'howdy'
          }); 
          obs.onNext({ type: 'input',
            name: 'okee',
            message:'okee'
          }); 
          obs.onCompleted();
        }.bind(this));
        inquirer.prompt(prompts).process.subscribe(log, log, complete);
      }
    

    【讨论】:

    • 为什么是.bind(this)
    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多