次のファイルを 1 行ずつ読み取り、「nameserver 8.8.8.8」が見つかったら読み取りを停止します。
nameserver 8.8.8.8
nameserver 45.65.85.3
nameserver 40.98.3.3
私はNode.jsとreadlineモジュールを使っています
const readline = require('readline');
const fs = require('fs');
function check_resolv_nameserver(){
// flag indicates whether namerserver_line was found or not
var nameserver_flag = false;
const rl = readline.createInterface({
input: fs.createReadStream('file_to_read.conf')
});
rl.on('line', (line) => {
console.log(`Line from file: ${line}`);
if (line === 'nameserver 8.8.8.8'){
console.log('Found the right file. Reading lines should stop here.');
nameserver_flag = true;
rl.close();
}
});
rl.on('close', function(){
if (nameserver_flag === true){
console.log('Found nameserver 8.8.8.8');
}
else {
console.log('Could not find nameserver 8.8.8.8');
}
});
}
check_resolv_nameserver();
最初の一致を読んだらすぐに rl.close() でクローズイベントを発行するので、コードは最初の行だけを読み取り、それ以上の読み取りを停止するはずです。しかし、出力は次のようになります。
Line from file: nameserver 8.8.8.8
Found the right file. Reading lines should stop here.
Found nameserver 8.8.8.8
Line from file: nameserver 45.65.85.3
Line from file: nameserver 40.98.3.3
最初の一致後に readline を停止し、他の処理に進むにはどうすればよいですか?
ベストアンサー1
ラインリーダーを停止できない場合は、これを実行してください(readline コールバックで):
lineReader.close()
lineReader.removeAllListeners()