node之event事件对象
event是nodejs的内置模块。 所有能触发事件的对象都是 EventEmitter 类的实例。
这些对象开放了一个 eventEmitter.on() 函数,允许将一个或多个函数绑定到会被对象触发的命名事件上。 事件名称通常是驼峰式的字符串,但也可以使用任何有效的 JavaScript 属性名。
订阅发布模式定义了一种一对多的依赖关系,在Node中EventEmitter 对象上开放了一个可以用于监听的on(eventName,callback)函数,允许将一个或多个函数绑定到对应的事件上。
当 EventEmitter 对象触发一个事件时,所有绑定在该事件上的函数都被同步地调用。这种模式在node中大量被使用,在node 中利用event的订阅发布者模式处理异步任务是很方便和优雅的。 需要注意的是,每个事件默认可以注册最多 10 个监听器。
EventEmitter 实例允许添加更多的监听器,但会向 stderr 输出跟踪警告,表明可能会导致内存泄漏。不过一般情况下我们是不会用到这么多监听函数的。
event的简单使用
const Event = require('events')
const event = new Event()
event.on('handle',()=>{
console.log('dododo')
})
event.emit('handle')
event发布订阅配合http请求响应
- 在请求的路由里面创建时间对象进行监听
if(data.pathname === '/api/getValue'){
eventObj = new Event()
eventObj.on('endRequest',(data)=>{
console.log(data)
res.end(data)
})
httpPost()
}else{
res.end("404")
}
- 在处理函数httpPost 处理完以后进行触发
function httpPost(){
let options = {
hostname:'m.xiaomiyoupin.com',
port:'443',
path:'/mtop/market/search/placeHolder',
method:'POST',
headers:{
"content-type":'application/json'
}
}
let req = https.request(options,(res)=>{
let data = ''
res.on('data',(chunk)=>{
data += chunk
})
res.on('end',()=>{
// 触发监听
eventObj.emit('endRequest',data)
})
})
req.write(JSON.stringify([{},{"baseParam":{"ypClient":1}}]))
req.end()
}