一尘不染

如何关闭可读流(结束之前)?

node.js

如何在Node.js中关闭可读流

var input = fs.createReadStream('lines.txt');

input.on('data', function(data) {
   // after closing the stream, this will not
   // be called again

   if (gotFirstLine) {
      // close this stream and continue the
      // instructions from this if
      console.log("Closed.");
   }
});

这会比以下更好:

input.on('data', function(data) {
   if (isEnded) { return; }

   if (gotFirstLine) {
      isEnded = true;
      console.log("Closed.");
   }
});

但这不会停止阅读过程…


阅读 211

收藏
2020-07-07

共1个答案

一尘不染

调用input.close()。它不在文档中,但是

https://github.com/joyent/node/blob/cfcb1de130867197cbc9c6012b7e84e08e53d032/lib/fs.js#L1597-L1620

显然可以完成这项工作:)它实际上所做的事情与您的相似isEnded

EDIT 2015-Apr-19 根据以下评论,并进行澄清和更新:

  • 此建议是骇客行为,没有记录在案。
  • 尽管从目前lib/fs.js来看,它仍然可以在> 1.5年后使用。
  • 我同意以下有关称呼destroy()更好的评论。
  • 如以下正确所述,这适用于fs ReadStreams,而不适用于通用Readable

至于通用解决方案:至少从我对文档的理解和快速浏览来看,它似乎并不存在_stream_readable.js

我的建议是将您的可读流置于 暂停
模式,至少防止上游数据源中的进一步处理。如文档所述,不要忘记unpipe()并删除所有data事件监听器,以便pause()实际上暂停

2020-07-07