NodeJS - 在 .on('readable') 事件中从可读流中读取数据时,为什么要打扰 while 循环



从可读流(如请求)中读取数据的这种方式的优点是什么?

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);
    };
});

相关内容

  • 没有找到相关文章

最新更新