发布-订阅者模式

238 阅读1分钟

原理一个全局变量event对象耦合发布器和订阅器

const fs = require('fs');

let result = {};
let event = {
    arr: [],
    on(fn) {
        this.arr.push(fn); //订阅
    },
    emit() {
        this.arr.forEach(fn => fn()); //发布
    }
}

event.on(function() {
    console.log('读取一次');
});

event.on(function() {
    if (Object.keys(result).length === 2) {
        console.log(result);
    }
});

fs.readFile('./assets/name.txt', 'utf-8', (err, data) => {
    result['name'] = data;
    event.emit();
});
fs.readFile('./assets/age.txt', 'utf-8', (err, data) => {
    result['age'] = data;
    event.emit();
});

console.log('主线程');