【问题标题】:RxJS Observable fromPromise and interactive loop in CLI appRxJS Observable fromPromise 和 CLI 应用程序中的交互式循环
【发布时间】:2017-08-03 18:48:55
【问题描述】:

我正在使用 node.js 构建一个简单的命令行工具。

过去,我使用类似这样的 Promise 方法

function listenCommand(){
    inquirer.prompt([{
        type:'input',
        name:'value',
        message:"Enter commande :"
    }]).then(function (command) {
        processCmd(command);
    });
}

function processCmd(){
   ...
   listenCommand()
}

这将创建我的主循环来输入命令。执行命令时,应用会要求下一个命令。

我现在正在尝试将其转换为类似的 RxJS 方法。

function listenCommand(){
    let listener = Rx.Observable.fromPromise(inquirer.prompt([{
        type:'input',
        name:'value',
        message:"Enter commande :"
    }]));

    listener.subscribe(function (command) {
        processCmd(command);
    });
}

function processCmd(){
   ...
   listenCommand()
}

它有效,但听起来不太好。

正确用 RxJS 做这个提示循环的方法是什么?还是 RxJS 不适合那种工作,我应该坚持 Promise 方法吗?

【问题讨论】:

    标签: javascript node.js promise rxjs


    【解决方案1】:

    您建议的第二种方法本质上是第一种方法,您只是将承诺包装在 Observable 接口中。您可能想使用repeat/repeatWhen 运算符:

    function listenCommand() {
      return Rx.Observable.defer(() => 
        inquirer.prompt([{
          type:'input',
          name:'value',
          message:"Enter commande :"
        }])
      )
      // Repeats until the end of time
      .repeat()
      .subscribe(cmd => processCommand(cmd))
    }
    

    在调用方你可以随时取消操作:

    const subscription = listenCommand();
    
    subscription.unsubscribe();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-14
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-21
      • 2018-01-21
      • 2016-02-17
      相关资源
      最近更新 更多