我是node.js的初学者,我知道这段代码是异步的,因为在CreateServer方法和socket.on方法中传递了私有函数。
require('net').createServer(function (socket) {
console.log("connected");
socket.on('data', function (data) {
console.log(data.toString());
});
})
但这是否意味着当一个"数据"事件触发时,服务器必须只执行相关的代码段,或者它还能处理其他数据"请求已处理之前的数据'请求?
答案 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.nextTick
,setTimeout
,setInterval
,许多I / O函数(文件,网络等)。这些异步函数的组合也是异步的。但是,如果不知道函数是什么,就不能假设它是异步的先验。带回调的同步函数的真实示例是列表上的.forEach
方法。