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();