/**
* author;duxp
* desc:控制任务的执行顺序,及任务的间隔时间刷新。利用js同步任务和异步任务
* @param
* params:对象属性包含:
* interval(所有事件间隔执行的时间,必填),
* minutes(该事件距离上次事件发生的间隔时间,必填),
* funArr:所有事件组成的对象,每个对象包含的属性有:
* funName(事件名称,必填),
* isAsync(是否为同步/异步任务,必填),
* isStart(是否立即执行,必填)
* delayTime(该事件初次执行延迟的时间,,!!注意:该属性选填,依据isStart的结果,若为false,则应加入该属性)
*
* demo例子:
* eventFn({
* interval:10000,
* minutes:1000,
* funArr:[
* {funName:vm.$refs.rankChartOne.initChart,isAsync:true,isStart:false,delayTime:2000},
* {funName:vm.$refs.rankChartTwo.initChart,isAsync:true,isStart:true,},
* ]
* })
*/
export default function eventFn(params){
if(!Array.isArray(params.funArr)){
console.log("params:参数类型funArr错误!");
this.$message('eventFn方法:参数类型funArr错误!');
return false;
}
if(params.funArr.length >0){
let _sync = []; //同步任务
let _async = []; //异步任务
params.funArr.forEach(item => {
if(item.isAsync){
_async.push({funName:item.funName,isStart:item.isStart,delayTime:item.delayTime});
if(item.isStart){
_sync.push({funName:item.funName});
}
}else{
_sync.push({funName:item.funName});
}
});
//执行同步任务
_sync.forEach(item => {
item.funName();
})
//执行延迟异步任务
_async.forEach(item => {
if(!item.isStart && item.delayTime){
setTimeout(function (){
item.funName();
},item.delayTime);
}
})
//间隔执行异步任务
setInterval(function (){
_async.forEach((item,idx) => {
setTimeout(function (){
item.funName();
},Number((idx+1)*params.minutes));
})
},params.interval);
}
}