2013-11-01 108 views
1

我是新來node.js我不知道如何在node.jsnode.js的函數回調

var data ="sampledata", name="testname", id=1; 
myTask(data,name,id); 

function myTask(data,name,id){ 
    var job = jobDetails(id,data) 
} 
function jobDetails(id,data){ 
    // some operations 
    return jobs 
} 
+1

你是什麼意思? Node.js *是* JavaScript。 – Amadan

+0

我想使用node.js執行上述操作 – Sush

+0

node.js * is * JavaScript。唯一真正的區別是主機接口(例如無頭和不同的事件源)。 – user2864740

回答

3

的原因震驚的沉默執行下面的操作是,這幾乎是不可能的回答你的問題在其目前的形式。但無論如何,我會給它一個鏡頭。

大多數情況下,您不會執行回調。你可能會將你的函數傳遞給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子系統在數據最終到達時知道如何處理數據,因爲屆時主線程會在其他冒險中消失。這仍然會讓生活變得更加複雜(有時非常可怕),但是這對於一個好的原因是這樣的。

+0

非常感謝你的簡要解釋 – Sush

+2

@Sush:這不是*簡短。 :-)。不過,無論如何你都很受歡迎。 –

+0

可以請你這個問題http://stackoverflow.com/questions/19701807/create-httpserver-using-node-js – Sush