今天我给大家介绍一下EventEmitter类。如您所知,Node.js 具有事件驱动的编程范例。这意味着我们将定义一些事件和回调,我们的事件将在我们的程序流程中被触发和处理。如果你问为什么采用这种方法,那是因为 JavaScript(我在上一篇文章中更详细地解释过)运行单线程,并且异步操作必须以某种方式处理而不阻塞。
如果你问这一切与 EventEmitter 类有什么关系,这个类为我们提供了一个可以轻松处理异步操作的结构。实际上,这就是观察者设计模式的实现。
const EventEmitter = require("events"); class Emitter extends EventEmitter {} const myE = new Emitter(); myE.on("test", () => { console.log("event meydana geldi."); }); myE.on("test", () => { console.log("event meydana geldi."); }); myE.on("test", () => { console.log("event meydana geldi."); }); console.log(myE.eventNames()); myE.emit("test");
上面我写了一个如何定义和调用事件的简单示例。这里,“on”方法实际上在一个空对象(主对象)上创建了一个名为“test”的数组。
{ test: [ [Function (anonymous)], [Function (anonymous)], [Function (anonymous)] ] }
这里,名为 eventName 的“on”方法被调用了 3 次,结果结构如上。
正如您所猜测的,名为“test”的事件是通过“emit”方法调用的。这里,foreach 方法返回测试数组并调用其中的函数。
那么这个结构用在哪里呢?
例如,在 DOM 事件中;
const btn = document.getElementById("btn"); btn.addEventListener("click", () => { console.log("clicked"); });
例如,在 Node.js 应用程序中的网络请求中;
const http = require("http"); const req = http .request( { method: "GET", hostname: "jsonplaceholder.typicode.com", path: "/todos/1" }, (res) => { res.on("data", (chunk) => { console.log(chunk.toString()); }); res.on("end", () => { console.log("response ended."); }); } ) .end();
以上是Node.js 事件发射器的详细内容。更多信息请关注PHP中文网其他相关文章!