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();
};
};
});
};
もう一度数値を入力すると、「i」がnullになるのはなぜですか? 「process.stdin.on」を正しく使用する方法は?
入力文字の後に_process.stdin
_のreadable
リスナーをアタッチしているため、各文字に対してprocess.stdin.read()
が複数回呼び出されます。 _process.stdin
_がインスタンスであるstream.Readable.read()
は、入力バッファーにデータがない場合はnullを返します。これを回避するには、リスナーを1回アタッチします。
_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回限りのリスナーをアタッチできます。
これは通常、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);
});
お役に立てれば。