这段代码是如何异步的?

时间:2014-06-26 10:18:58

标签: javascript node.js asynchronous server-side

我是node.js的初学者,我知道这段代码是异步的,因为在CreateServer方法和socket.on方法中传递了私有函数。

require('net').createServer(function (socket) {
console.log("connected");

socket.on('data', function (data) {
    console.log(data.toString());
});
})

但这是否意味着当一个"数据"事件触发时,服务器必须只执行相关的代码段,或者它还能处理其他数据"请求已处理之前的数据'请求?

1 个答案:

答案 0 :(得分:0)

Node.js是单线程的。这意味着没有并行性。一切都顺序发生。如果 data 事件触发,则关联的处理程序将触发,并且其他任何内容都不会同时运行。每个代码块(即括号{...}之间的代码)将按顺序运行,没有任何东西可以中断它。

  

由于传递了私有函数,这段代码是异步的   在CreateServer方法

实际上并非如此。看看这个例子:

var fn = function(clb) {
    clb(1);
}

console.log("start");
fn(function(x) {
    console.log(x);
});
console.log("end");

fn函数接受回调,但它不是异步的。你所谈论的函数是异步的,因为我们知道它是异步的。 Node.js中有几个异步函数:process.nextTicksetTimeoutsetInterval,许多I / O函数(文件,网络等)。这些异步函数的组合也是异步的。但是,如果不知道函数是什么,就不能假设它是异步的先验。带回调的同步函数的真实示例是列表上的.forEach方法。