了解Node中的非阻塞IO

这些代码有什么区别?

***第一*

var express = require('express'); var app = express(); app.post('/', function (req, res) { console.log('Procesando abastecimiento...'); var rawData = ''; req.on('data', function (chunk) { rawData += chunk; }); req.on('end', function(){ console.log('Data recibida: ' + rawData); res.end(); }); }); 

第二

 var express = require('express'); var app = express(); app.post('/', function (req, res) { console.log('Procesando abastecimiento...'); var rawData = ''; req.on('data', function (chunk) { rawData += chunk; }); req.on('end', function(){ console.log('Data recibida: ' + rawData); }); res.end(); }); 

如果closures“end”事件callback中的连接( res.end() ),客户端是否等待直到所有数据都被读取? 我不明白区别,我只知道我的代码更快地使用第二种方法。 你能解释我为什么吗?

在第一个例子中,你设置了res.end(); 指令在请求endcallback中被执行(即end事件被引发)。

在第二个你调用res.end(); 马上没有等待请​​求结束。

你可以把它看作是req.on('end', ...)是一个为将来会发生的事件设置处理程序的函数,但是直到事件发生时才会执行代码接收。