前端培训丁鹿学堂:node之event模块入门笔记

125 阅读1分钟
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请求响应
  1. 在请求的路由里面创建时间对象进行监听
    if(data.pathname === '/api/getValue'){
        eventObj = new Event()
        eventObj.on('endRequest',(data)=>{
            console.log(data)
            res.end(data)
        })
        httpPost()
    }else{
        res.end("404")
    }
  1. 在处理函数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()
}