2017-04-05 5 views
0

Ich möchte den Inhalt eines Elements Wie in HTML-Seite während Nodejs Readline-Prozess zu aktualisieren

in meiner HTML-Seite während Nodejs Readline-Prozess dynamisch ändern. Hier

ist ein jsfiddle Beispiel gezeigt Display Effekt, den ich erfüllen möchte: https://jsfiddle.net/09kuyn7v/

Aber ich möchte dynamisch angezeigt werden Zeilen von meinem lokalen Datei, aber nicht aus einem Array in der Funktion definiert, wie in Das Beispiel für das Beispiel.

Ich habe Readline- Modul in meiner Lese-Datei-Version clickTest verwendet() Funktion:

function clickTest(){ 
    var fs = require('fs'); 
    var lineReader = require('readline').createInterface({ 
    input: fs.createReadStream(filePath) 
    }); 

    lineReader.on('line', function(line){ 
    document.getElementById("demo").innerHTML += line; 
    }); 
} 

Aber wenn ich auf die Schaltfläche klicken, die Seite wurde genau wie eingefroren wird und dann wurden die Zeilen gleichzeitig angezeigt (nicht eins nach dem anderen, wie im Beispiel oben gezeigt).

+0

Sie sind hier Operationen Server- und Client-Seite zu mischen. Sie können das fs-Modul auf dem Client nicht verwenden, um aus der Datei zu lesen, und auf dem Knoten können Sie die ganze Datei lesen und sie dann an den Client senden. Also, was Sie wahrscheinlich wollen, ist die ganze Datei zu lesen und es an Client, der dann das Intervall setzt, oder öffnen Sie den Socket auf Client herunter und weiter Zeilen von Knoten an Server senden, während sie gelesen werden – Tom

+0

@Tom Eigentlich habe ich bereits fs verwendet Modul aus Datei lesen (warum nicht?). Mein Problem ist, wie man den Inhalt in der HTML-Seite anzeigt. – Patrick

+0

Kennen Sie den Unterschied zwischen Client und Server? Solange ich weiß, können Sie lokale Dateien auf der Clientseite nicht lesen (es sei denn, Sie wählen sie explizit in der Dateieingabe aus) – Tom

Antwort

0

Zunächst einmal, jedes Mal, wenn Sie diese Funktion aufrufen, tun Sie require('readline') und require('fs'), also würde ich das Skript nach oben verschieben.

würde ich zwei Ansätze vorschlagen:

Pausieren lesen sollten Sie eine Zeile, dann anhalten und fortsetzen nach einiger Zeit angeben

var readline = require('readline'); 
var fs = require('fs'); 

function clickTest(){ 
    var lineReader = readline.createInterface({ 
    input: fs.createReadStream(filePath) 
    }); 

    lineReader.on('line', function(line){ 
    // pause emitting of lines... 
    lineReader.pause(); 

    // write line to dom 
    document.getElementById("demo").innerHTML += line; 

    // Resume after some time 
    setTimeout(function(){ 
     lineReader.resume(); 
    }, 1000); 
    }); 

    lineReader.on('end', function(){ 
    lineReader.close(); 
    }); 
} 

Dieser Ansatz lesen.

Buffering Linien

var readline = require('readline'); 
var fs = require('fs'); 
var lines = []; 

function clickTest(){ 
    var lineReader = readline.createInterface({ 
    input: fs.createReadStream(filePath) 
    }); 

    lineReader.on('line', function(line){ 
    lines.push(line) 
    }); 

    lineReader.on('end', function(){ 
    lineReader.close(); 

    printLine(0); 
    }); 
} 

function printLine(index){ 
    // write line to dom 
    document.getElementById("demo").innerHTML += lines[index]; 

    if (index < lines.length - 1){ 
     setTimeout(function(){ 
     printLine(index + 1); 
     }, 1000); 
    } 
} 

Dieser Ansatz alle Zeilen in ein Array speichern und dann druckt sie langsam heraus.

Bitte beachten Sie, dass ich nicht node-webkit bekommen habe, um es tatsächlich zu testen, so dass Sie möglicherweise einen Fehler im Code finden, aber es sollte Ihnen allgemeine Idee geben

+0

Vielen Dank. Meine Datei enthält bis zu 10 Millionen Zeilen. Ich kann also nur dem ersten Ansatz folgen. – Patrick

+0

10 Millionen Zeilen schreiben eine Sekunde? Klingt wie eine schreckliche Benutzererfahrung für mich ... 10m Zeilen drucken eine Sekunde würde 116 Tage dauern, um auszudrucken. – Tom

Verwandte Themen