/**
 * 自定义的事件触发器
 */
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}