Node.js 如何与“合作”;“上的过程标准”;?
我试图理解process.stdin 例如,我需要在控制台中显示数组元素。我应该允许用户选择显示哪个元素 我有密码:Node.js 如何与“合作”;“上的过程标准”;?,node.js,stdin,Node.js,Stdin,我试图理解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
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();
};
};
});
};
为什么我第二次键入数字时“i”为空?如何正确使用“process.stdin.on”?您在
process.stdin
的每个输入字符后附加了一个可读的侦听器,这会导致对每个字符调用process.stdin.read()
stream.Readable.read()
,它是的一个实例,如果输入缓冲区中没有数据,则返回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',…)
附加一个一次性侦听器。这是使用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);
});
希望这有帮助。您试过了吗?谢谢。但是还有两个问题-如果我运行它并且不按任何键,为什么会出现未定义的?如果我将rawMode设置为false——它不工作,为什么?当可以从流中读取数据时,会发出一个可读
事件。因此,您必须在调用read()
时检查null
。默认情况下,stdin
处于烹调模式,这意味着字符在回车后被缓冲并发送到程序。要使程序在非原始模式(烹饪)下工作,您可以在键入字符以刷新缓冲区后发送EOF(Ctrl+D),或按ENTER键并从输入中删除新行。如何以编程方式或交互方式调用process.stdin.on(“end”,)函数。我无法结束使用节点jsv.6.XHi,如何触发process.stdin.on('end')?我被困在控制台中,无法继续运行其余代码。您好,Control+D将触发进程。stdin.on('end')函数。