文章目录
event订阅发布模式实现函数解耦。
event.on(函数名,箭头函数)
:进行事件监听event.emit(函数名,传递的参数)
:触发事件
基本使用格式
const EventEmitter = require("events")
const event = new EventEmitter()
// 监听
event.on("play", (data) => {
console.log("事件被触发了")
console.log(data)
})
event.on("run", (data) => {
console.log("事件被触发了")
console.log(data)
})
// 触发事件
event.emit("play", "1111我是play参数")
event.emit("run","1111我是run参数")
event.emit 触发 event.on中的函数运行
运行输出:
事件被触发了
1111我是play参数
事件被触发了
1111我是run参数
event解决异步问题
异步问题:
var http = require("http")
var https = require("https")
var url = require("url")
http.createServer((req, res) => {
var urlobj = url.parse(req.url, true)
res.writeHead(200, {
"Content-Type": "application/json;charset=utf-8",
// cors头,允许跨域
"access-control-allow-origin":"*"
})
switch (urlobj.pathname) {
case "/hello":
// 拿数据
httpget((data) => {
res.end(data)
})
break;
default:
res.end("404")
}
}).listen(3000, () => {
console.log("服务器启动成功")
})
function httpget(cb) {
var data = ""
// http还是https视请求的网站而定
https.get(`https://i.maoyan.com/`, (res) => {
// 获取数据的过程
res.on("data", (chunk) => {
data+=chunk
})
// end是获取的最终数据
res.on("end", ()=>{
console.log(data)
// 将数据返回给前端
cb(data)
})
})
}
代码中:
httpget((data) => {
res.end(data)
})
传递的参数是回调函数,等获取到数据之后才进行执行,这就是异步。
event的订阅发布模式解决异步:
const EventEmitter = require("events")
var http = require("http")
var https = require("https")
var event = null
var url = require("url")
http.createServer((req, res) => {
var urlobj = url.parse(req.url, true)
res.writeHead(200, {
"Content-Type": "application/json;charset=utf-8",
// cors头,允许跨域
"access-control-allow-origin":"*"
})
switch (urlobj.pathname) {
case "/hello":
event = new EventEmitter()
event.on("play", (data) => {
console.log(data)
res.end(data)
})
// httpget()中执行event.emit进行触发
httpget()
break;
default:
res.end("404")
}
}).listen(3000, () => {
console.log("服务器启动成功")
})
function httpget(cd) {
var data = ""
// http还是https视请求的网站而定
https.get(`https://www.kuaikanmanhua.com/`, (res) => {
// 获取数据的过程
res.on("data", (chunk) => {
data+=chunk
})
// end是获取的最终数据
res.on("end", ()=>{
console.log(data)
// 将数据返回给前端
event.emit("play",data)
})
})
}