评论

收藏

[JavaScript] 5. Node.js事件触发器

开发技术 开发技术 发布于:2021-07-13 11:06 | 阅读数:379 | 评论:0

  事件触发器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
  
关注下面的标签,发现更多相似文章