var readline = require('readline');
var reader = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
function stdinput(){
reader.on('line', function (cmd) {
return cmd;
});
}
console.log(stdinput());
输出:
未定义
stdinput()函数在从stdin读取输入之前给出“undefined”。 我搜索了许多资源但却无法理解为什么它会异步解释。
我在nodejs中编写CLI交互式应用程序。它多次读取输入 。如果我们使用递归来读取,它需要更多的堆栈内存,如果我们使用回调,Promise和Async / await在stdinput()之前也会得到 undefined ,即在读取输入之前首先执行部分代码
答案 0 :(得分:1)
或者你可以使用回调:
var readline = require('readline');
var reader = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
function stdinput(callback){
reader.on('line', function (cmd) {
callback (cmd);
});
}
stdinput(function (cmd) {
console.log('cmd: ', cmd);
});
答案 1 :(得分:0)
这是因为函数stdinput在reader.on('line',..事件发生之前返回。尝试这种方法:
var readline = require('readline');
var reader = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: true
});
function stdinput(){
return new Promise((resolve) => {
reader.on('line', function (cmd) {
resolve(cmd);
});
});
}
stdinput().then((cmd) => console.log("cmd: ", cmd))
你也可以尝试这种方法:
function processInput(cmd) {
// Do something cool with the cmd
//
//
console.log('processInput: command: %s processed', cmd);
}
function stdinput(){
reader.on('line', function (cmd) {
console.log('cmd: ', cmd);
processInput(cmd);
});
}
或者这个:
var askForName = () => console.log("What's your name? ");
function sayHello(){
askForName();
reader.on('line', function (name) {
console.log('Hello ' + name + "!");
askForName();
});
}
sayHello();
为了说清楚,原来的stdInput有效地返回undefined,因为它退出而没有设置返回值,这就是你将这个结果记录到控制台的原因。