美文网首页
Stream 对象的原型、事件

Stream 对象的原型、事件

作者: kzc爱吃梨 | 来源:发表于2022-03-04 10:57 被阅读0次

    Stream对象的原型链

    s=fs.createReadStream(path)

    • 那么它的对象层级为
    • 自身属性(由fs.ReadStream构造)
    • 原型:stream.Readable.prototype
    • 二级原型:stream.Stream.prototype
    • 三级原型:events.EventEmitter.prototype
    • 四级原型:Object.prototype
      Stream 对象都继承了EventEmitter

    node --inspect-brk xxx.js

    image.png image.png

    Readable Stream

    静止态paused和流动态flowing

    • 默认处于paused态
    • 添加data事件监听,它就变为flowing态
    • 删掉data事件监听,它就变为paused态
    • pause()可以将它变为 paused
    • resume()可以将它变为flowing
    const http = require('http')
    const fs = require('fs')
    const server = http.createServer()
    server.on('request', (request, response) => {
      const stream = fs.createReadStream('./big_file.txt')
      stream.pipe(response)
      stream.pause()
      setTimeout(()=>{
        stream.resume()
      },3000)
    })
    
    server.listen(8888)
    

    Writable Stream

    drain 流干了事件

    • 表示可以加点水了
    • 我们调用stream.write(chunk)的时候,可能会得到false
    • false的意思是你写太快了,数据积压了
    • 这个时候我们就不能再write了,要监听drain等drain 事件触发了,我们才能继续write
    • 听不懂?看文档中的代码就懂了

    finish 事件

    • 调用stream.end()之后,而且
    • 缓冲区数据都已经传给底层系统之后,
    • 触发finish事件

    相关文章

      网友评论

          本文标题:Stream 对象的原型、事件

          本文链接:https://www.haomeiwen.com/subject/ukjllrtx.html