node.js readfile wehe

Der folgende Code erstellt eine Textdatei und liest sie dann, überschreibt sie und liest sie erneut. Mit Ausnahme der Erstellung der Datei werden die drei E / A-Vorgänge unter Verwendung von Node.js async readFile und writeFile ausgeführt.

Ich verstehe nicht, warum der erste Lesevorgang zurückkehrtkein Fehler aberkeine Daten entweder. Die Ausgabe dieses Codes ist:

Beginnend...Erledigt.Erstes Lesen der zurückgegebenen leeren Daten!schreibe fertig OKZweiter Lesevorgang zurückgegebene Daten: aktualisierter Text

Selbst wenn die Operationen in einer willkürlichen Reihenfolge stattfinden würden (aufgrund ihrer asynchronen Natur), hätte ich NICHT erwartet, ein "leeres Daten" -Objekt zu erhalten.

Irgendwelche Ideen, warum ich beim Lesen der Datei leere Daten erhalte (und kein Fehler)?

Kann ich irgendetwas tun, um sicherzustellen, dass der Dateiinhalt gelesen wird?

<code>var fs = require('fs');
var fileName = __dirname + '/test.txt';

// Create the test file (this is sync on purpose)
fs.writeFileSync(fileName, 'initial test text', 'utf8');


console.log("Starting...");

// Read async
fs.readFile(fileName, 'utf8', function(err, data) {
    var msg = "";
    if(err)
        console.log("first read returned error: ", err);
    else {
        if (data === null) 
            console.log("first read returned NULL data!");
        else if (data === "") 
            console.log("first read returned EMPTY data!");
        else
            console.log("first read returned data: ", data);
    }
});


// Write async
fs.writeFile(fileName, 'updated text', 'utf8', function(err) {
    var msg = "";
    if(err)
        console.log("write finished with error: ", err);
    else
        console.log("write finished OK");
});


// Read async
fs.readFile(fileName, 'utf8', function(err, data) {
    var msg = "";
    if(err)
        console.log("second read returned error: ", err);
    else
        if (data === null) 
            console.log("second read returned NULL data!");
        else if (data === "") 
            console.log("second read returned EMPTY data!");
        else
            console.log("second read returned data: ", data);
});


console.log("Done.");
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage