【问题标题】:Event-driven asynchronous callbacks of NodejsNodejs的事件驱动异步回调
【发布时间】:2013-07-07 21:50:06
【问题描述】:

我正在阅读 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 没有经验,这可能是我看不懂的原因。

【问题讨论】:

    标签: javascript jquery node.js


    【解决方案1】:

    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);
      }
    }
    

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

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

    【讨论】:

      【解决方案2】:

      Asynchronously 表示 waits 不是 response 并转到下一个语句 被执行

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

      阅读:

      【讨论】:

        猜你喜欢
        • 2017-05-15
        • 2018-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-10
        • 1970-01-01
        相关资源
        最近更新 更多