Ich habe die folgende Datei Ich möchte Zeile für Zeile lesen und aufhören zu lesen, sobald ich "Nameserver 8.8.8.8" gefunden habe.readline stoppt nicht Zeile lesen nach rl.close() in Nodejs emittieren
nameserver 8.8.8.8
nameserver 45.65.85.3
nameserver 40.98.3.3
ich NodeJS verwende und das Readline- Modul zu tun, so
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();
Da ich ein enges Ereignis mit rl.close() emittieren, sobald ich das erste Spiel zu lesen, würde ich erwarten, mein Code, um nur die erste Zeile zu lesen und dann weiter zu lesen. Aber stattdessen sieht meine Ausgabe wie diese
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
Wie kann ich Readline- Anschlag nach dem ersten Spiel und lassen Sie mich auch mit einem etwas gehen lassen?
Meine Vermutung ist, dass der Inhalt der Datei zwischengespeichert werden, schließen so 'rl' (oder die Datei-Handle) nicht mehr' line' Ereignisse verhindern, dass ausgesendet, wenn noch vollständige Zeilen im Puffer vorhanden sind. Ein Workaround wäre, ein Flag zu setzen, sobald Sie die richtige Zeile erhalten haben, und nachfolgende Zeilen zu ignorieren, wenn dieses Flag gesetzt ist. – robertklep