Javascript 在CLI应用程序中可从Promise和交互式循环中观察到RxJS
我正在使用node.js构建一个简单的命令行工具 在过去,我对这样的事情使用承诺的方法Javascript 在CLI应用程序中可从Promise和交互式循环中观察到RxJS,javascript,node.js,promise,rxjs,Javascript,Node.js,Promise,Rxjs,我正在使用node.js构建一个简单的命令行工具 在过去,我对这样的事情使用承诺的方法 function listenCommand(){ inquirer.prompt([{ type:'input', name:'value', message:"Enter commande :" }]).then(function (command) { processCmd(command); }); } func
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不适合这种工作,我应该坚持承诺方法吗?您建议的第二种方法本质上是第一种方法,您刚刚将承诺包装在一个可观察的界面中。您可能希望使用
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();