如何10行代码实现node的events的事件发送和监听
发布于 4 年前 作者 TimLiu1 4966 次预览 最后一次回复是 4 年前 来自 分享
如何10行代码实现node的events的事件发送和监听
突然来了兴致想要自己写写node 的事件监听和发送,使用了比较简单的方法实现了一下,代码如下
如何10行代码实现node的events的事件发送和监听
const events = {
data: [],
on: (event, cb) => {
events.data.push({ event, cb })
},
emit: (event, data) => {
events.data.forEach(e => {
if (e.event === event) {
e.cb(data)
}
})
}
}
//以下为测试代码
events.on('event', (data) => {
console.log('data', data)
})
events.on('event', (data) => {
console.log('data1', data)
})
events.emit('event', 'data')
10 回复
哈哈哈
一般会再问你
666
@netwjx 这个时间复杂度是什么样的 异步其实不太需要关心复杂度,可以忍受等待 还有啥优化空间 哈哈,挺好的了 如何传参 data给用户自己传,不限定类型 如何控制this 这里都没有this
@netwjx 当然,目前是O(n), 如果使用Map那就是O(1)
需要关心时间复杂度,因为 emit 处理时间过长会让其他底层 libuv 等待处理的事件处在排队中
@daGaiGuanYu 这个靠谱, 还规避了使用this
以前还想过用这种形式写"class", 能减少很多 “this.” 代码
mitt,基本上是一模一样