我试图了解process.stdin。
例如 - 我需要在控制台中显示数组元素。我应该允许用户选择将显示哪个元素。
我有代码:
var arr = ['elem1','elem2','elem3','elem4','elem5'],
lastIndx = arr.length-1;
showArrElem();
function showArrElem () {
console.log('press number from 0 to ' + lastIndx +', or "q" to quit');
process.stdin.on('readable', function (key) {
var key = process.stdin.read();
if (!process.stdin.isRaw) {
process.stdin.setRawMode( true );
} else {
var i = String(key);
if (i == 'q') {
process.exit(0);
} else {
console.log('you press ' +i); // null
console.log('e: ' +arr[i]);
showArrElem();
};
};
});
};
为什么"我"当我第二次输入数字时为空?如何使用" process.stdin.on"正确?
答案 0 :(得分:8)
您在readable
之后在每个输入字符后附加process.stdin
侦听器,这会导致每个字符调用process.stdin.read()
多次。 stream.Readable.read()
是process.stdin
的实例,如果输入缓冲区中没有数据,则返回null。要解决此问题,请将侦听器附加一次。
process.stdin.setRawMode(true);
process.stdin.on('readable', function () {
var key = String(process.stdin.read());
showArrEl(key);
});
function showArrEl (key) {
console.log(arr[key]);
}
或者,您可以使用process.stdin.once('readable', ...)
附加一次性监听器。
答案 1 :(得分:1)
这通常是我在使用stdin(node.js)时输入的方式。这是ES5版本,我还没有使用ES6。
function processThis(input) {
console.log(input); //your code goes here
}
process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
_input += input;
});
process.stdin.on("end", function () {
processThis(_input);
});
希望这会有所帮助。