2013-07-10 113 views
1

我正在閱讀Node Beginner Book。在「事件驅動的異步回調」一章中,作者舉例說明了異步回調的概念。該代碼示例是這樣的:Nodejs事件驅動的異步回調

var result = database.query("SELECT * FROM hugetable"); 
console.log("Hello World"); 

添加一個回調函數來database.query後,代碼變成異步:

database.query("SELECT * FROM hugetable", function(rows) { 
    var result = rows; 
}); 
console.log("Hello World"); 

我的問題是,爲什麼database.query()函數後,簡直變成異步添加一個回調函數。 我以前沒有使用Javascript和JQuery的經驗,這可能是我無法理解的原因。

回答

3

有在既有異步的味道和香味同步Node.js的許多功能。例如,有兩種方法可以讀取文件的內容(docs):

//asynchronous 
fs.readFile("filename.txt", function(err, data) { 

}); 

//synchronous 
var data = fs.readFileSync("filename.txt"); 

筆者提供事實上確實看起來有點混亂,但它可能是database.query使異步調用取決於是否例子作爲第二個參數傳入一個callback

例如,它可以實現這樣的事:

function query(queryString, callback) { 
    if(callback !== undefined) { 
    queryInternal(queryString, callback); 
    return; 
    } 
    else { 
    return queryInternalSync(queryString); 
    } 
} 

總的來說,我認爲該公約是一個function或者是asynchronoussynchronous(不是兩個),所以你的直覺是正確的。

注意,在synchronous的情況下,console.logresult後執行查詢的內容,而在asynchronous情況下,console.log將盡快query函數返回執行,並在執行前callback