node(events)事件原理

1、事件原理

const fs = require("fs");

let wbEvent = {
    event:{
        //"wbFunc":[fn1,fn2,fn3]保存当前函数的事件队列
    },//包含有哪些事件
    on:function(funcName,func){
        if(this.event[funcName]){//如果存在则加入这个函数队列中
            this.event[funcName].push(func);
        }else{//如果不存在这个函数队列就新建队列
            this.event[funcName] = [func];
        }
    },
    emit:function(funcName,msgData){
        if(this.event[funcName]){
            this.event[funcName].forEach(funcItem => {
                funcItem(msgData);//执行事件队列中的函数
            });
        }
    }
}

fs.readFile("txt.txt",{
    encoding:"utf-8"
},(err,data)=>{
    if(err) throw err;
    //console.log(data);
    //读取完成之后需调用三个步骤,如果将三个步骤代码全部写到一起,影响后期维护
    //1.连接数据库操作
    //2.数据格式化操作
    //3.数据渲染操作
    wbEvent.emit("wbFunc",data);
});

wbEvent.on("wbFunc",(msgData)=>{
    console.log("1.连接数据库操作",msgData);
});
wbEvent.on("wbFunc",(msgData)=>{
    console.log("2.数据格式化操作",msgData);
});
wbEvent.on("wbFunc",(msgData)=>{
    console.log("3.数据渲染操作",msgData);
})

2、使用案例

const events = require("events");
const fs = require("fs");

let ee = new events.EventEmitter();

ee.on("wbFunc",(msgData)=>{
    console.log("第一步执行:",msgData);
});
ee.on("wbFunc",(msgData)=>{
    console.log("第二步执行:",msgData);
});
ee.on("wbFunc",(msgData)=>{
    console.log("第三步执行:",msgData);
});

fs.readFile("txt.txt",{
    encoding:"utf-8"
},(err,data)=>{
    if(err) throw err;
    ee.emit("wbFunc",data);
});

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章