Node--4.node事件

一、自定义事件

1.1、自定义事件创建(node事件原理)

// 自定义一个事件对象
let readThing ={
  // 用来放置事件的对象
  event: {},
  // 用来定义事件
  // 参数:eventName --》 事件名, eventFn --》 事件
  on: function(eventName, eventFn) {
    if(this.event[eventName]) {
      this.event[eventName].push(eventFn)
    }else {
      this.event[eventName] = []
      this.event[eventName].push(eventFn)
    }
  },
  // 用来循环使用这个定义的事件
  // 参数:eventName --》 事件名, data --》 一些事件的数据
  emit: function(eventName, data) {
    if(this.event[eventName]) {
      this.event[eventName].forEach(element => {
        element(data)
      });
    }
  }
}

1.2、自定义事件使用的实例

let fs = require('fs')

// 1. 自定义一个事件对象
// 参数:eventName --》 事件名, eventFn --》 事件
let readThing ={
  // 用来放置事件的对象
  event: {},
  // 用来定义事件
  on: function(eventName, eventFn) {
    if(this.event[eventName]) {
      this.event[eventName].push(eventFn)
    }else {
      this.event[eventName] = []
      this.event[eventName].push(eventFn)
    }
  },
  // 用来循环使用这个定义的事件
  // 参数:eventName --》 事件名, data --》 一些事件的数据
  emit: function(eventName, data) {
    if(this.event[eventName]) {
      this.event[eventName].forEach(element => {
        element(data)
      });
    }
  }
}

// 2. 将要做的事情,定义成事件
readThing.on('fileSuccess', () => {
  console.log('1 数据库查看信息')
})
readThing.on('fileSuccess', () => {
  console.log('2 统计年龄比例')
})
readThing.on('fileSuccess', () => {
  console.log('3 查看用户信息')
})

fs.readFile('hello.txt', {flags: 'r', encoding: 'utf-8'}, (err, data) => {
  if(err) {
    console.log('出错')
  }else {
    console.log(data)

    // 1 数据库查看信息
    // 2 统计年龄比例
    // 3 查看用户信息
    // 3. 触发以上定义的事件
    readThing.emit('fileSuccess', data)
  }
})

二、Node事件模块

Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。

Node.js 几乎每一个 API 都是支持回调函数的。

2.1、模块对象events

// 引入 events 模块
var events = require('events');

2.2、使用 eventEmitter 对象

其实总体步骤跟 自定义事件一样,只不过node已经帮我们定义好了事件对象

let fs = require('fs')
// 引入 event 模块
let events = require('events');

// 1. 创建 eventEmitter 对象
let eventEmitter = new events.EventEmitter();


// 2. 将要做的事情,定义成事件
eventEmitter.on('fileSuccess', () => {
  console.log('1 吃夜宵')
})
eventEmitter.on('fileSuccess', () => {
  console.log('2 唱K')
})
eventEmitter.on('fileSuccess', () => {
  console.log('3 打王者')
})




// 也可以封装成Promise的方式,使用async/await会更加简洁
fs.readFile('hello.txt', {flags: 'r', encoding: 'utf-8'}, (err, data) => {
  if(err) {
    console.log('出错')
  }else {
    console.log(data)

    // 3. 触发以上定义的事件
    eventEmitter.emit('fileSuccess')
  }
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值