event-stream

预计阅读时间: 2 分钟

v6.4.0 新增

稳定性:稳定

来自 npm 模块 event-stream,如需使用,请用

const es = require('event-stream')

该模块用于便捷的创建流,完整说明见项目主页

可读流:

es.readable(function (count, callback) {
  if(streamHasEnded)
    return this.emit('end')
  
  //...
  
  this.emit('data', data) //use this way to emit multiple chunks per call.
      
  callback() // you MUST always call the callback eventually.
             // the function will not be called again until you do this.
})

转换流:

var es = require('event-stream')
es.map(function (data, callback) {
  //transform data
  // ...
  callback(null, data)
})
 

可写流:

var es = require('event-stream')
es.map(function (data, callback) {
  // ...
  callback(null, null)
})
 

例子:

const es = require("event-stream");

//创建一个可读流
let e = 0
let r = es.readable(function(count, callback) {
    if (e > (10)) return this.emit('end')
    this.emit('data', String(e));
    e++;
    return callback()
});
//转换流
let map = es.map(function (data, callback) {
  data = `--${data}--`
  callback(null, data)
})

//可写流,这里是将数据打印出来
let w = es.map(function (data, callback) {
  log(data)
  callback(null, null)
})

w.on('close',()=>{
    log('操作完成')
});

r.pipe(map).pipe(w);//将 3 个流连起来

例子 2(配合 io 流使用):

const es = require("event-stream");
const stream = require("stream")

let r = stream.createFileReadStream(
    '/sdcard/文本文件.txt'
)

//可写流,这里是将数据打印出来
let w = es.map(function (data, callback) {
  log(data)
  callback(null, null)
})

//连通流,其中 es.split() 是一个流,负责将数据按行输出
r.pipe(es.split()).pipe(w)