Mike 发表于 2021-7-13 11:06:53

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);

结果:触发了事件fn19  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);

结果:
触发了事件fn19
触发了事件fn2
移除事件前
移除事件后
触发了事件fn2
  emitter.removeAllListener() 移除全部监听器或指定的   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);

结果:
触发了事件fn19
触发了事件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
  
文档来源:51CTO技术博客https://blog.51cto.com/u_12668701/3049710
页: [1]
查看完整版本: 5. Node.js事件触发器