EventService.js 1.15 KB
Newer Older
fukai committed
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
/**
 * 自定义的事件触发器
 */
export default class EventService {
    static on(key, fn){
        if(!this.events[key]){
            this.events[key] = [];
        }
        for(let originFn of this.events[key]){
            if(originFn === fn){
                return;
            }
        }
        this.events[key].push(fn);
        return ()=>{
            this.off(key,fn);
        }
    }
    static off(key,fn){
        if(!this.events[key]){
            return;
        }
        const fns = this.events[key];
        for(let i=0;i<fns.length;i++){
            if(fns[i] == fn){
                fns.splice(i,1);
                return;
            }
        }
    }
    static async emit(key,arg){
        if(!this.events[key]){
            return;
        }
        const results = [];
        const fns = this.events[key];
        for(let i = 0;i<fns.length;i++){
            let result;
            try{
                result = await fns[i](arg);
            }catch(error){

            }
            results.push(result);
        }
        return results;
    }
}
EventService.events = {}

const LOGIN="LOGIN"
const LOGOUT="LOGOUT"
export {LOGIN,LOGOUT}