javascript - 创建自定义 EventEmitter 时不需要调用 .emit 吗?
问题描述
var myEvent = new EventEmitter();
myEvent.on("someEvent", messg => { console.log(messg); });
myEvent.emit("someEvent", "Hello its my first custom event");
所以我创建了一个 EventEmitter 对象和自定义事件。我将我的自定义事件添加"someEvent"
到 myEvent 对象,然后调用.emit
函数来查看内部箭头函数的结果。
var fs = require("fs");
var myReadStream = fs.createReadStream(__dirname + "/readme.txt", {
highWaterMark: 50
});
//data event added
myReadStream.on("data", chunk => {
console.log("new chunk received:");
console.log(chunk);
});
但是,在这个流式传输示例中,我没有调用.emit
函数,而是调用了这个箭头函数。怎么会这样,我猜那个"data"
事件是建在事件里的?
解决方案
确实,它是内置的。
使用fs.createReadStream
API 后,将创建一个可读流data
,并在侦听器绑定到该事件时调用该事件。
从文档:
每当流将数据块的所有权让给消费者时,就会发出“数据”事件。每当通过调用 readable.pipe()、readable.resume() 或通过将侦听器回调附加到“数据”事件而以流动模式切换流时,都可能发生这种情况。
推荐阅读
- angularjs - 可能未处理的拒绝:在 laravel 中使用 Angularjs
- unixodbc - IIB 节点退出且无响应 MYSQL ODBC 数据源
- ios - Swift iOS SceneKit 如何使用 NSSecureCoding 对 SCNMatrix4 进行安全编码?
- reactjs - React.Children.map 带有 Fragments 的模棱两可的行为
- java - 通过多个映射为实体映射中的重复列
- spring-boot - 轻松使用 Spring Boot 获得 404 响应
- c# - Selenium、C#、Chrome 和 Firefox 都不会启动自动脚本,但 IE 会(添加脚本)
- java - Eclipse 发生错误。查看日志文件 (Windows x64)
- bit-manipulation - 棘手的 Xor 问题 p(x) = x^(x/2) 给定 p(x) 找出 x 的值
- php - 连接到 WooCommerce 过滤器