RxJS可观察来自CLI应用程序中的促销和交互式循环

时间:2017-08-03 18:48:56

标签: javascript node.js promise rxjs

我正在使用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 方法吗?

1 个答案:

答案 0 :(得分: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();