-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path5.emit.js
More file actions
36 lines (34 loc) · 1.03 KB
/
Copy path5.emit.js
File metadata and controls
36 lines (34 loc) · 1.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 发布订阅的设计模式
// 订阅 -> 守护的池子_arr (发布的时候需要做什么事情 fn)
// 发布 -> 去池子里找出这个订阅者_arr,然后做该做的事情 fn()
let fs = require("fs");
//并行的处理方式
function EventEmitter(){
this._arr = [];
}
EventEmitter.prototype.on = function(callback){ //订阅的方法
this._arr.push(callback);
}
EventEmitter.prototype.emit = function(key, val){ //发布方法 发布的时候,得让订阅的事情做一次
//让on方法里面的_arr遍历执行一次
this._arr.forEach(fn=>fn(key, val));
};
//订阅
let ev = new EventEmitter();
let results = {};
ev.on((key, val)=>{
//等会发布的时候做具体的事情
results[key] = val;
if(Object.keys(results).length===2){
console.log(results);
}
});
//发布
fs.readFile('name.txt', 'utf8', (err,data)=>{
if(err) return err;
ev.emit('name', data); //发布
});
fs.readFile('age.txt', 'utf8', (err,data)=>{
if(err) return err;
ev.emit('age', data); //发布
});