简介
EventEmitter 来自events模块,这个模块是各种事件的模块,向之前学的模块中.on(‘事件名’, 回调函数) 这个都是来自EventEmitter 模块, 而且这个是注册事件而触发事件是.emit(‘事件名’) 这个emit像极vue里那个emit
示例
const { EventEmitter } = require("events");// 创建一个事件处理对象// 可以注册事件,可以触发事件const ee = new EventEmitter();ee.on("abc", () => {console.log("abc事件触发了1");});const fn2 = () => {console.log("abc事件触发了2");}ee.on("abc", fn2);/***只触发一次*/ee.once("abc", () => {console.log("abc事件触发了3", "该事件只触发一次");});ee.on("bcd", () => {console.log("bcd事件触发了3");});ee.emit("abc"); //触发名为abc的事件,会依次运行注册的事件函数ee.off("abc", fn2) // 取消事件ee.emit("abc"); //触发名为abc的事件,会依次运行注册的事件函数ee.emit("abc"); //触发名为abc的事件,会依次运行注册的事件函数ee.emit("bcd"); //触发名为bcd的事件,会依次运行注册的事件函数console.log("script end")
传递参数与vue中的emit一样
const { EventEmitter } = require("events");// 创建一个事件处理对象// 可以注册事件,可以触发事件const ee = new EventEmitter();ee.on("abc", (data1, data2) => {console.log("abc事件触发了", data1, data2);});ee.emit("abc", 123, 456)
通过事件来让请求更简单
// 发送网络请求模块const http = require("http");const { EventEmitter } = require("events");module.exports = class extends EventEmitter {constructor(url, options) {super();this.url = url;this.options = options;}send(body = "") {const request = http.request(this.url, this.options, res => {let result = "";res.on("data", chunk => {result += chunk.toString("utf-8");});res.on("end", () => {this.emit("res", res.headers, result);});});request.write(body);request.end();}};
发送请求
const MyRequest = require("./MyRequest");const request = new MyRequest("http://duyi.ke.qq.com");request.send();request.on("res", (headers, body) => {console.log(headers);console.log(body);});
