我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 大前端

    • nodejs

      • nodejs有哪些全局对象,怎么用
      • 如何在nodejs中实现分页机制功能
      • 如何在nodejs实现文件上传功能
      • 如何实现nodejs鉴权机制,说一下思路
      • 说说nodejs中require的原理
      • 说说nodejs中的EventEmit是如何实现的
        • 是什么
        • 怎么用
        • 原理
        • FAQ
      • 说说nodejs中的事件循环机制理解
      • 说说nodejs中进程通信有哪些方式
      • 说说nodejs中间件是什么,如何封装一个中间件
      • 说说对buffer的理解及应用场景
      • 说说对fs模块的理解及常用方法
      • 说说对nodejs的理解及应用场景
      • 说说对process的理解及常用方法
      • 说说对stream的理解及应用场景
      • nodejs如何进行性能监控及优化
      • nodejs批量改文件名
    • git

    • CI

    • 小程序

    • docker

    • Typescript

    • webpack

    • 安全

  • 基础

  • 框架

  • 情商

  • 算法

  • 网络

  • 千锤百炼
  • 大前端
  • nodejs
fangdown
2021-08-13
目录

说说nodejs中的EventEmit是如何实现的

# 是什么

EventEmitter:是nodejs实现事件驱动的基础, 可以理解成发布订阅模式

  • 几乎所有模块都继承了这个类
  • 可以监听/绑定监听器, 实现了异步操作

# 怎么用

实现一个EventEmitter类

class EventEmitter {
  constructor() {
    this.events = {};
  }
  on(type, handler) {
    if (!this.events[type]) {
      this.events[type] = [];
    }
    this.events[type].push(handler);
  }
  off(type, handler) {
    if (!this.events[type]) return;
    this.events[type] = this.events[type].filter((item) => item !== handler);
  }
  emit(type) {
    const args = [...arguments].slice(1)
    this.events[type].map(handler =>{
      handler(args)
    })
  }
  once(type,handler) {
    const fn = (...args) =>{
      handler.apply(this, args)
      this.off(type, fn)
    }
    this.on(type, fn)
  }
}
const emitter = new EventEmitter()
emitter.on('d1', ()=>{
  console.log('打老虎')
})
emitter.on('d1', ()=>{
  console.log('打狮子')
})
emitter.once('d1', ()=>{
  console.log('打豹子')
})

emitter.emit('d1')
// 打老虎
// 打狮子
// 打豹子
emitter.emit('d1')
// 打老虎
// 打狮子
// 少了一个打豹子

# 原理

# FAQ

#nodejs
上次更新: 2021/12/19, 18:05:42
说说nodejs中require的原理
说说nodejs中的事件循环机制理解

← 说说nodejs中require的原理 说说nodejs中的事件循环机制理解→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式