1

我正在阅读 The Node Beginner Book。在事件驱动的异步回调一章中,作者举了一个例子来说明异步回调的思想。代码示例如下:

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 的经验,这可能是我无法理解的原因。

4

2 回答 2

3

node.js 中有许多函数同时具有异步风格和同步风格。例如,有两种方法可以读取文件 ( docs ) 的内容:

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

});

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

作者提供的示例实际上看起来有些令人困惑,但它可能会database.query根据 a 是否callback作为第二个参数传入来进行异步调用。

例如,它可以这样实现:

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

一般来说,我认为惯例是 afunction要么是要么asynchronoussynchronous不是两者),所以你的直觉是正确的。

请注意,在这种synchronous情况下,console.log将在result具有查询内容之后执行,而在这种asynchronous情况下,console.log将在query函数返回时执行,并且在执行之前callback执行。

于 2013-07-10T05:04:22.480 回答
1

Asynchronously意味着它不适waits用于responseand 转到要执行的下一个语句

在您的第二个示例中,回调函数在执行此操作时处理您的响应,它不会等待并console.log("Hello World");显示outputin console

读这个:

于 2013-07-10T04:54:46.283 回答