RxJS Observable from CLI和应用程序中的交互循环

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

在过去,我正在使用这样的Promise方法

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

这将创build我的主循环input命令。 当命令执行时,应用程序将要求下一个。

我现在正在尝试将其转换为类似的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不适合这种工作,我应该坚持承诺的方法呢?

你提出的第二种方法基本上是第一种方法,你已经将这个承诺包装在一个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();