事件触发器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
|