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

 

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