node.js - 关于代码执行路径的精度

时间:2016-04-25 17:31:16

标签: mysql node.js asynchronous io

我一直在阅读node.js是单线程和同步的。但是,I / O请求是异步执行的[1]

我有一个问题。给出以下代码片段:

c.query(  //#1
'SELECT SLEEP(20);',  //#2
    function (err, results, fields) {
      console.log("query executed"); //#3
    }
);
console.log("hello"); //#4

假设队列中有2个请求。我的理解如下:第一个请求执行此路径#1->#2->#4->#3。之后,处理第二个请求。

从我读过的内容来看,作者似乎暗示着#1->#2->#4。由于#3是异步的(等待I / O),因此在此期间处理第二个请求。

有人可以澄清一下吗?感谢。

1 个答案:

答案 0 :(得分:0)

Node.js事件流基于回调,这是异步的。

这样,即使Node.js是单线程的,当你调用一个带回调的函数时,该函数也是异步调用的,而不会阻塞同步代码的执行。

在您插入的示例中,您可以看到查询函数接受回调作为最后一个参数。一旦调用它,Node.js就会在事件流上发送执行,继续执行下一行代码。

为了澄清,在该示例中没有#2路径,'SELECT SLEEP(20);'是查询函数的第一个参数。第二个参数是查询函数返回结果时执行的回调函数function (err, results, fields) {}

流程将是#1->#3->#2:

c.query('SELECT SLEEP(20);',//#1
    function (err, results, fields) {
        console.log("query executed"); //#2
    }
);
console.log("hello"); //#3