【问题标题】:Node.JS - How to stop a piped stream conditionallyNode.JS - 如何有条件地停止管道流
【发布时间】:2015-02-20 03:28:16
【问题描述】:

我是 java-script 和 nodejs 的新手...

我有一个文件处理流,它由多个流在一起组成。效果很好...我想通过在达到阈值时有条件地停止流处理和读取来增强这一点。

    inputStream.
    pipe(unzip()).
    pipe(latin1Decoder).
    pipe(
         combine(
                 through(function(obj){
                      //part-1 -
                      this.push(obj);
                      }),
                 through(function(obj){
                      //part-2-
                      this.push(obj);
                      })
         ));

part-1 中,如果我使用this.push(null),那么组合器将忽略传入的输入。

但是,我无法停止阅读该文件。这很烦人,因为文件非常大。

我从管道内部访问输入流以关闭它的最佳方式是什么?

【问题讨论】:

标签: javascript node.js stream


【解决方案1】:

好的,这就是我最终解决它的方法:

    var cnt = 0;
    var processingStream = combine(unzip(), latin1Decoder(), part1(), part2());
    inputStream.pipe(processingStream);
    inputStream.on('data', function(x) {
      var lineCnt = x.toString().split(/\r\n|\r|\n/).length;
      cnt += lineCnt;
      if (cnt > 5) {
        inputStream.close();
        inputStream.unpipe(processingStream);
        processingStream.end();
      }          
    });

可能不是最有效的方法,但它符合我的要求。

请注意,输入流以块的形式读取,因此一次读取多行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多