5. Node.js事件触发器

事件触发器events的使用方法

 
eventEmitter.on(eventName, listener) 注册监听器
    eventName | 事件名称
    listener 回调函数。
eventEmitter.emit(eventName[, ...args]) 触发事件
    eventName | 事件名称
    ...args 参数
const EventEmitter = require('events');

class MyEmitter extends EventEmitter{}

let myEmitter = new MyEmitter();
myEmitter.on('绑定事件的名字1',(a,b)=>{
    console.log('触发了事件  ',a+b)
})

myEmitter.emit('绑定事件的名字1',1,8);

结果:触发了事件   9

方式二:也可以把事件单独写出来

const EventEmitter = require('events');

class MyEmitter extends EventEmitter{}

let myEmitter = new MyEmitter();
function fn1(a,b){
    console.log('触发了事件fn1 ',a+b)
}
myEmitter.on('hi',fn1)

myEmitter.emit('hi',1,8);

结果:触发了事件fn1  9

eventEmitter.once(eventName, listener) 绑定的事件只能触发一次

const EventEmitter = require('events');
class MyEmitter extends EventEmitter{}
let myEmitter = new MyEmitter();

myEmitter.once('hello',()=>{
  console.log('触发了hello事件')
})

myEmitter.emit('hello')
myEmitter.emit('hello')

结果:触发了hello事件   //虽然只触发了两次,但只打印了一条

emitter.removeListener(eventName,listener) 从名为 eventName 的事件的监听器数组中移除指定的 listener

const EventEmitter = require('events');

class MyEmitter extends EventEmitter{}

let myEmitter = new MyEmitter();

function fn1(a,b){
    console.log('触发了事件fn1 ',a+b)
}

function fn2(){
  console.log("触发了事件fn2")
}

myEmitter.on('hi',fn1)
myEmitter.on('hi',fn2)

myEmitter.emit('hi',1,8);
console.log("移除事件前")
myEmitter.removeListener('hi',fn1)
console.log("移除事件后")
myEmitter.emit('hi',1,8);

结果:
触发了事件fn1  9
触发了事件fn2
移除事件前
移除事件后
触发了事件fn2

 

emitter.removeAllListener([eventName]) 移除全部监听器或指定的 eventName 事件的监听 器
const EventEmitter = require('events');

class MyEmitter extends EventEmitter{}

let myEmitter = new MyEmitter();

function fn1(a,b){
    console.log('触发了事件fn1 ',a+b)
}

function fn2(){
  console.log("触发了事件fn2")
}

myEmitter.on('hi',fn1)
myEmitter.on('hi',fn2)

myEmitter.emit('hi',1,8);
console.log("移除事件前")

myEmitter.removeAllListeners('hi');

console.log("移除事件后")
myEmitter.emit('hi',1,8);

结果:
触发了事件fn1  9
触发了事件fn2
移除事件前
移除事件后
 

util常用工具

util.callbackify(original) async 异步函数(或者一个返回值为 Promise 的函数)转换成遵循异常优先的回调风格的函数
const util = require('util');
// const fs = require('fs');
async function hello(){
  return 'hello world'
}

let helloCb = util.callbackify(hello);

helloCb((err,res) => {
  if(err) throw err;
  console.log(res)
})

结果:
hello world

 

util.promisify(original) 转换成 promise 版本的函数
方式一:
const util = require('util');
const fs = require('fs');
let stat = util.promisify(fs.stat)

stat('./util.js').then((data) => {
  console.log(data)
}).catch((err) => {
  console.log(err)
})


结果:

Stats {
  dev: 990155,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: 4096,
  ino: 562949953438056,
  size: 446,
  blocks: 0,
  atimeMs: 1580193956953.654,
  mtimeMs: 1580194308352.753,
  ctimeMs: 1580194308352.753,
  birthtimeMs: 1580193956953.654,
  atime: 2020-01-28T06:45:56.954Z,
  mtime: 2020-01-28T06:51:48.353Z,
  ctime: 2020-01-28T06:51:48.353Z,
  birthtime: 2020-01-28T06:45:56.954Z
}



方式二:
const util = require('util');
const fs = require('fs');

let stat = util.promisify(fs.stat)

async function statFn () {
  try {
    let stats = await stat('./utilTest.js');
    console.log(stats)
  } catch (e) {
    console.log(e)
  }
}

statFn();
util.types.isDate(value) 判断是否为 date 数据
 
const util = require('util');
console.log(util.types.isDate(new Date()))

结果:
true

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值