node.js - 尝试理解 Node.js 中的可读流

标签 node.js

在我的module.js中我有

var Stream = require('stream');

module.exports = function () {
  var stream = new Stream();

  stream.readable = true;

  stream.emit('data', 'some stuff')
  stream.emit('end')

  return stream;
}

和我的index.js

var module = require('./module')

module().pipe(process.stdout)

子堆栈的示例来自 stream handbook工作得很好。为什么我的代码在命令行中没有显示任何内容?

最佳答案

因为您在调用 pipe 之前发出数据,并且在触发第一个“data”事件后附加“data”监听器

EventEmitter 的调用是同步的(就像 Node.js 中几乎所有其他非 IO 操作一样)

稍微简化的版本

stream.emit('data', 'some stuff')
stream.pipe(process.stdout)

没有EventEmitter可以重写为

stream.listeners = [];
// 'emit' call
var ondata = stream.listeners.data;
if (ondata) {
   // only one listener case in the example
   ondata('some stuff');
}
// 'pipe' call
stream.listeners.data = function(buff) {
    process.write(buff);
}

关于node.js - 尝试理解 Node.js 中的可读流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768053/

相关文章:

javascript - fs.readFile 中的 return 语句导致未处理的 promise 拒绝

javascript - 如何在ejs模板中使用if条件

javascript - nodejs 向子进程发送信号不起作用

javascript - QuickPay Node.js REST api

node.js - 使用 Prisma 2 从查询中排除用户密码

node.js - 我收到 "error message: Process exited before completing request"

node.js - 发送缓冲区到客户端进行下载

javascript - Webpack 不会从 node_modules 导入包(仅限 js)

node.js - 上传一个字符串作为文件

node.js - 错误 : EACCES: permission denied, 访问 '/usr/local/lib/node_modules/ANGULAR