私は、サンプルコードを持っており、出力は以下の通りです: コードを:nodejsのコールバック関数はどのように動作していますか?
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");
}
出力:
最初 秒 第二 が最初 が第二開始日に終了したに終了した開始日に終了しました など20回まで 最初のスタート D
input2.txtはそれでひとつの文字を持っていないとinput1.txtはそれでラインの何を持っていたよう
は、最初の20回
まで 1などを開始しました。私は、コールバック関数は、ファイル読み取り操作がその時点までに完了する必要があるため、1回の繰り返し後に1番目のファイルからの入力を印刷した後に呼び出されると想定していました。しかし、そうではない。最初に同期操作を完了していることを意味し、コールバックだけが機能しています。それはどのように可能でしょうか?コールバックが長い間待たなければならない場合、ここで非同期呼び出しの目的は何ですか?
と思います見てください。どのように 'setTimeout()'がコールバックが起こる前に現在の実行ティックが完了するのを待っているのか分かっていれば、 'fs.readFile()'はまったく同じように動作します。指定されたミリ秒数ではなくファイルの読み込み時間に依存します。 –