js事件加载机制(适用于大屏定时刷新数据)

/**

* 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);

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容