我正在阅读节点初学者书。在“事件驱动的异步回调”一章中,作者举例说明了异步回调的概念。代码示例如下:
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的经验,这可能是我无法理解的原因。
答案 0 :(得分: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
是asynchronous
或synchronous
(不是两者)所以你的直觉是正确的。
请注意,在synchronous
情况下,console.log
将在result
查询内容后执行,而在asynchronous
情况下,console.log
将被执行只要query
函数返回并且执行callback
之前。
答案 1 :(得分:1)
Asynchronously
表示waits
没有response
并转到下一个语句
待执行
在第二个示例中,回调函数在执行此操作时处理您的响应,
它没有等待,console.log("Hello World");
显示output
中的console
。
阅读本文: