我正在使用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 方法吗?
答案 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();