【问题标题】:How to create an array with node stream and then access the data如何使用节点流创建数组然后访问数据
【发布时间】:2023-02-09 21:34:52
【问题描述】:

我需要访问一个目录,我将使用带有生成器的流,并且对于每个文件,我将推送到 myArray 数组。 如何返回填充的数组,在这种情况下它返回空,即使在遍历流之后也是如此?

const { Readable, Transform, Writable } = require('node:stream')

const myArray = []

class ReadStream extends Readable {
  i = 0

  _read() {
    if (this.i >= 10) {
      this.push(null)
    } else {
      this.i++
      const str = String(this.i)
      const buf = Buffer.from(str, 'ascii')
      console.clear()
      this.push(buf)
    }
  }
}

class TransformStream extends Transform {
  _transform(chunk, encoding, callback) {
    const transformed = chunk.toString().toLowerCase()

    callback(null, Buffer.from(String(transformed)))
  }
}

class WriteStream extends Writable {
  _write(chunk, encoding, callback) {
    const write = chunk.toString()

    myArray.push(write)

    callback()
  }
}

new ReadStream().pipe(new TransformStream()).pipe(new WriteStream())

在这种情况下,我将如何返回填充的 myArray 数组?

【问题讨论】:

    标签: javascript node.js arrays node-streams


    【解决方案1】:

    如果您必须使用写入流,请再次给我留言, 尝试这个:

    const { Readable, Transform, Writable } = require('node:stream')
    
    const myArray = []
    
    class ReadStream extends Readable {
    
      i = 0
    
      _read() {
        if (this.i >= 10) {
          this.push(null)
        } else {
          this.i++
          const str = String(this.i)
          const buf = Buffer.from(str, 'ascii')
          this.push(buf)
        }
      }
    }
    
    class TransformStream extends Transform {
      _transform(chunk, encoding, callback) {
        const transformed = chunk.toString().toLowerCase()
        
        callback(null, Buffer.from(String(transformed)))
      }
    }
    
    new ReadStream().pipe(new TransformStream())
    .on("data", function (chunk) {
      const write = chunk.toString()
      myArray.push(write)
    })
    .on('end',function write() {
      
      // console.clear()
      console.log(myArray);
      })
    

    编辑:使用 Writestream:

    const { Readable, Transform, Writable } = require('node:stream')
    
    const myArray = []
    
    class ReadStream extends Readable {
      i = 0
    
      _read() {
        if (this.i >= 10) {
          this.push(null)
        } else {
          this.i++
          const str = String(this.i)
          const buf = Buffer.from(str, 'ascii')
          console.clear()
          this.push(buf)
        }
      }
    }
    
    class TransformStream extends Transform {
      _transform(chunk, encoding, callback) {
        const transformed = chunk.toString().toLowerCase()
    
        callback(null, Buffer.from(String(transformed)))
      }
    }
    
    class WriteStream extends Writable {
      _write(chunk, encoding, callback) {
        const write = chunk.toString()
    
        
        callback()
      }
      _final(callback){
        
        myArray.push(write)
        callback()
      }
    }
    
    new ReadStream().pipe(new TransformStream()).pipe(new WriteStream())
    
    console.log(myArray);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 2019-11-27
      • 2012-01-23
      • 2021-08-29
      • 2011-12-09
      相关资源
      最近更新 更多