Ich habe ein Beispielcode und Ausgänge sind wie folgt: Code:Wie Callback-Funktion in NodeJs funktioniert?
for(var i = 0; i <20; i++) {
var fs = require("fs");
fs.readFile('input2.txt', function (err, data) {
if (err) return console.error(err);
console.log("first started\n");
console.log(data.toString());
});
console.log("first Ended");
console.log("second started");
var data = fs.readFileSync('input1.txt');
console.log(data.toString());
console.log("second Ended");
}
Output:
Ended ersten zweiten begonnen zweiten zweiten Ended ersten Ended begonnen und so weiter bis 20 mal first started d
begann 1 und so weiter bis 20mal
Als input2.txt nur ein Zeichen in ihm hat und input1.txt hat keine Zeilen drin. Ich ging davon aus, dass die Callback-Funktion nach dem Drucken der Eingabe aus der ersten Datei nach einer Iteration aufgerufen würde, da die Dateileseoperation zu diesem Zeitpunkt abgeschlossen sein sollte. Aber das ist nicht der Fall. Bedeutet, dass der Synchronisierungsvorgang zuerst abgeschlossen wird und nur Callback funktioniert. Wie wäre das möglich? Wenn Callback so lange warten soll, was ist der Zweck des asynchronen Aufrufs hier?
Denken Sie an 'fs.readFile (...)' 'wie setTimeout (...)'. Wenn Sie verstehen, wie und warum 'setTimeout()' darauf wartet, dass der aktuelle Ausführungs-Tick abgeschlossen wird, bevor der Callback erfolgt, sollten Sie verstehen, dass 'fs.readFile()' genau so funktioniert, außer dass die Zeit des Callbacks abgelaufen ist tritt in Abhängigkeit davon auf, wie lange es dauert, die Datei zu lesen, anstatt wie viele Millisekunden Sie angeben. –