从可读流(如请求)中读取数据的这种方式的优点是什么?
request.on('readable', function(){
var chunk = null;
while (null !== (chunk = request.read())) {
response.write(chunk);
};
});
vs这样没有while循环吗?既然'readable'只会继续触发,为什么要用while循环呢?
request.on('readable', function(){
var chunk = request.read();
if(chunk !== null){
response.write(chunk);
}
});
根据API文档:
var req = http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
使用res.on('data')事件,当准备好时获得数据。这将允许你的程序继续做其他事情,直到下一个数据块准备好被处理(记住HTTP是在以块为单位的TCP之上的)。
使用下面的代码可能会工作,但为什么要这样做,当它不必要地消耗CPU周期和阻止其他代码执行(记住,你的Node.js JavaScript代码是单线程的)。使用事件要好得多,因为它允许JavaScript运行和处理输入/输出,而不会不必要地阻塞进程。
request.on('readable', function(){
var chunk = null;
while (null !== (chunk = request.read())) {
response.write(chunk);
};
});