let subscribers = {}; function subscribe(eventName, callback) { if (subscribers[eventName] === undefined) { subscribers[eventName] = []; } subscribers[eventName] = [...subscribers[eventName], callback]; return function unsubscribe() { subscribers[eventName] = subscribers[eventName].filter((cb) => { return cb !== callback; }); }; } function publish(eventName, data) { if (subscribers[eventName]) { const promises = subscribers[eventName] .map((callback) => callback(data)) return Promise.all(promises); } else { return Promise.resolve() } }