1

我使用此函数在我的 Node.js 应用程序中获取请求的输入数据:

function getData(callback){
  req.data = '';
  req.receivedDataSize = 0;
  req.maxDataSize = 5000;
  req.dataCorrupted = false;

  req.on('data', function(chunk){
    if(req.dataCorrupted === false && chunk.length < req.maxDataSize && req.receivedDataSize < req.maxDataSize){
      req.data += chunk;
      req.receivedDataChunk += chunk.length;
    } else {
       // throw 413 error.

       req.dataCorrupted = true;
       return;
  });

  req.on('end', function(){
    if(req.dataCorrupted === false){
      callback(null);
    } else {
      callback('input-data-corrupted');
    }

    return;
  });
}

我想知道每个事件回调中的这些“return”语句是如何使用的,当我抛出“return”时,下一个“req.on('data')|| req.on('end')”会发生什么? 有没有办法阻止事件侦听器停止侦听该事件,或者只是调用“req.end();” 停止的正确方法?

4

1 回答 1

1

在您的示例return中,什么都不做,而是结束函数并返回一个值。它不会阻止流回调。您可以从代码示例中完全删除这些语句,它的工作方式相同。

req.end()如果它是一个流,调用应该终止它,这意味着req.on('data')不会再被触发。

这是关于流的不是超级有用的 API 文档:

http://nodejs.org/api/stream.html#stream_stream_end

这也是节点中流的有用指南:http: //maxogden.com/node-streams

于 2012-08-20T22:09:24.547 回答