//2019-11-13
发布订阅
import {utils} from 'roi';
let descriptor = Object.create(null);
descriptor.subscribe = {};
let morse = {
//发布
publish(action){
if(
!utils.type(action,'object') ||
!utils.type(action.type,'string') ||
!utils.type(descriptor.subscribe[action.type],'array') ||
!descriptor.subscribe[action.type].length
){ return }
//遍历执行
descriptor.subscribe[action.type].forEach(fn => {
fn(action.payload);
});
},
//订阅
subscribe(action,fn){
if(!utils.type(action,'string') || !utils.type(fn,'function')){ return }
//判断是否有当前队列
if(!utils.type(descriptor.subscribe[action],'array')){
descriptor.subscribe[action] = [];
};
//判断添加fn
if(descriptor.subscribe[action].indexOf(fn) < 0){
descriptor.subscribe[action].push(fn);
}
//返回取消订阅
return () => {
this.unsubscribe(action,fn);
}
},
//取消订阅
unsubscribe(action,fn){
if(
!utils.type(action,'string') ||
!utils.type(fn,'function') ||
!utils.type(descriptor.subscribe[action],'array') ||
!descriptor.subscribe[action].length
){ return }
//清除订阅
let index = descriptor.subscribe[action].indexOf(fn);
descriptor.subscribe[action].splice(index,1);
}
};
export default morse;