我一直在阅读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),因此在此期间处理第二个请求。
有人可以澄清一下吗?感谢。
答案 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