我會寫下面的代碼來練習函數與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
這不是我期待的結果。 應該
>> 91389 //the length of YouBikeTP.txt
>> "string in callback"
任何人都可以告訴我爲什麼會回調函數被調用之前funcWithCallback(回調)完成?我誤解了回調函數的含義嗎?
謝謝你的回覆,我還有一個問題使用上面的同樣的代碼。 如果我在前一行callback()(您命令的那一行)的readFile回調中添加了一個IO綁定任務(例如,將數據保存到另一個文件或耗時的循環操作),callback()將執行直到I/O限制任務完成? –
yes @張軒銘無論你想要做什麼,如果它是同步的,它將正常工作,即回調將在該任務之後按照我的回答執行。但是如果你正在做的任務是異步的,那麼你將不得不將主回調放在回調中,以完成你正在努力完成的大任務。你也可以使用promises https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise –