的原因震驚的沉默執行下面的操作是,這幾乎是不可能的回答你的問題在其目前的形式。但無論如何,我會給它一個鏡頭。
大多數情況下,您不會執行回調。你可能會將你的函數傳遞給API,並且在某個時候它會調用你的函數。這就是執行回調的API,而不是你。作爲一個例子,這裏有一個方法使用的node.js的文件系統API:
fs.readFile('/etc/passwd', {encoding:'utf-8'}, function (err, data) {
if (err) {
console.error(err);
} else {
console.log(data);
}
});
第三個參數是一個函數,通常被稱爲回調。函數fs.readFile()
設置I/O並立即返回。在將來的某個點上,I/O完成並回調您傳入的函數(因此術語回調),提供錯誤代碼和可能的數據,此時您的函數可以完成它想要的功能。
如果你想執行回調你自己,你寫一個函數,函數和函數回電話,如:
function pass_double_x_to(x, cb) {
var two_x = 2 * x;
cb(two_x);
}
pass_double_x_to(21, function(tmol) {
console.log("zOMG, " + tmol + "!");
});
現在是你的函數,pass_double_x_to
,即執行回調function(tmol) { … }
。這實際上是一個非常愚蠢的使用回調,因爲你的函數可以返回double-x。使用回調讓生活變得更加複雜,沒有理由。
fs.readFile()
和許多其他node.js API使用回調的原因是,它幾乎所有阻塞操作都是異步執行的,因此它不會阻塞主線程,這會讓您的整個服務器在操作系統關閉時暫停並獲取文件。所以,與其等待文件被讀取並返回內容,它會開始一個異步I/O操作,並立即返回,以便您的程序可以關閉並執行其他操作(如服務其他連接客戶端),而I/O在後臺進行中。您將回調傳遞給fs.readFile()
,以便底層I/O子系統在數據最終到達時知道如何處理數據,因爲屆時主線程會在其他冒險中消失。這仍然會讓生活變得更加複雜(有時非常可怕),但是這對於一個好的原因是這樣的。
你是什麼意思? Node.js *是* JavaScript。 – Amadan
我想使用node.js執行上述操作 – Sush
node.js * is * JavaScript。唯一真正的區別是主機接口(例如無頭和不同的事件源)。 – user2864740