我用
创建了一个节点readline接口this.io = readline.createInterface({
input: process.stdin,
output: process.stdout,
completer:(line:string) => { //adapted from Node docs
const hits = commands.filter((c) => c.startsWith(line.toUpperCase()));
return [hits.length ? hits : commands, line];
}
});
第一次在控制台中输入时,它会正常显示,如> go north
。但是,在我接受此输入后,在我的其余代码中使用它,并使用readline再次提示用户,它显示为> ggoo nnoorrtthh
,如果我第三次提示,则显示为> gggooo nnnooorrrttthhh
。我在创建界面时尝试使用terminal:false
,但它没有改变任何东西。是否有任何东西使我的readline重复字符,我可以乘法输入?
编辑:我还应该补充一点,当我将用户的输入分析到我的代码中时,我得到了正确的输出(它总是返回"向北和#34;),但它基本上输入用户输入两次,然后输入三次,依此类推。
处理输入的代码:
let arg = line.substr(firstSpace+1);
let shouldProceed = this.handler(cmd, arg); //call handler function!
if(shouldProceed){
this.io.prompt();
} else {
this.io.close();
}
}
else {
console.log('Invalid command. Commands are:', commands.join(', '));
this.io.prompt();
}
shouldProceed总是如此。如果用户键入"退出",则io将关闭。