JavaScriptをコールバックして練習する関数に次のコードを記述します。関数が完了する前にコールバックを実行するコールバックを持つ関数
fs = require('fs');
function funcWithCallback(callback) {
fs.readFile('YouBikeTP.txt', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
console.log(data.length);
});
callback();
}
funcWithCallback(function(){
console.log("string in callback ")
})
このコードの目的は、メソッドの実行順序を制御することです。テキストファイルの長さが印刷された後の文字列「のコールバック内の文字列は、」印刷する必要がありますが、私はこのコードを実行したときの結果は次のようになります。私は期待された結果ではありません
>> "string in callback"
>> 91389 //the length of YouBikeTP.txt
。 は、誰もが、なぜコールバック関数が完了(コールバック)funcWithCallbackの前に呼び出されます?私に言うことができる
>> 91389 //the length of YouBikeTP.txt
>> "string in callback"
する必要がありますか私はコールバック関数の意味を誤解しましたか?
返信ありがとうございます、私は上記の同じコードを使用してさらに質問があります。 callback()の前の行(指定した行)のreadFileコールバックでIOバインドされたタスク(別のファイルにデータを保存するか、時間のかかるループ操作)を追加すると、callback I/O-boundタスクが終了するまで? –
yes @張是あなたがしようとしているものは、同期しているとうまくいきます。つまり、自分の答えに従ってコールバックが実行されます。しかし、あなたがやっているタスクが非同期の場合、あなたが達成しようとしている大きなタスクのコールバックの中にメインコールバックを置かなければなりません。約束を使用することもできます。https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise –