UNPKG

godprotocol

Version:

A distributed computing environment for Web 4.0 — integrating AI, decentralisation, and virtual computation.

48 lines (41 loc) 1.16 kB
import { query_ } from "../callables/functions/query.js"; class Events { constructor() { this.events_listeners = new Object(); } add_listener = async (name, handler, filter) => { let listeners = this.events_listeners[name]; if (!listeners) { listeners = new Array(); this.events_listeners[name] = listeners; } if ( !listeners.find( (li) => li.handler === handler && JSON.stringify(li.filter) === JSON.stringify(filter) ) ) listeners.push({ handler, filter }); }; emit = async (name, payload, cb) => { let listeners = this.events_listeners[name]; if (!listeners) return; let total = 0; for (let l = 0; l < listeners.length; l++) { let { filter, handler } = listeners[l]; if (await query_(payload, filter, await this.ds.get_folder())) { total++; handler(payload) .then((res) => { total--; cb && cb(res, { done: !total, event: { name, handler, filter } }); }) .catch((e) => { console.log(e.message); }); } } }; } export default Events;