setTimeout 之callee用法

作者: 抓不住的风 | 来源:发表于2014-11-22 16:24 被阅读52次

var noticeObj = { 

type: 1, 

 timeBegin: '2014-11-22 10:10:00', 

 timeEnd: '2014-11-22 10:10:10', 

 timeInterval: 2, 

 title: '测试标题', 

 content: '测试内容', 

 sendUserName: 'test', 

 clientId: 'xxx', 

 username: 'monitor', 

 noticeId: 1 

}; 

 var timeoutId; //记录setTimeout的Id 方便以后清楚

var currTime = Date.now(); 

var beginDate = new Date(noticeObj.timeBegin); 

var intervalTime = beginDate.getTime() - currTime;//距离开始发送公告的时间 

var message = { //消息内容

 title : noticeObj.title, content : noticeObj.content , type : noticeObj.type 

}; 

var count = 0; //统计发送次数

var beginDate = new Date(noticeObj.timeBegin).getTime(); 

var endDate = new Date(noticeObj.timeEnd).getTime(); 

var times = 0; //计算从开始到结束时间内 根据频率计算总共要发送的次数

if(noticeObj.timeInterval > 0){ // 为零时表示只发送一次

   times = (endDate - beginDate)/ (noticeObj.timeInterval*1000);

}           

 console.log('timestimestimes:',times); 

//下面是重要的逻辑

 timeoutId = setTimeout(function(){ 

       count++; 

       console.log('count:',count); 

       if(!noticeObj.timeInterval && count >1 ){ 

            clearTimeout(timeoutId); //只发送一次的情况

       } 

       if (count >= times) { 

          clearTimeout(timeoutId); //发送次数够了 直接清除

       }

       if (timeoutId._idleTimeout > 0) {

               if(!noticeObj.timeInterval){//0 只发送一次 

                    console.log('发视频楼发视频楼发视频楼'); 

                } else {

                   console.log('发视频楼');                 

                  //该句是重赋值timeoutId 说那么多没用 自己运行一下吧

                  setTimeout(arguments.callee,noticeObj.timeInterval*1000); 

               } 

        }

 },intervalTime); 

书上也有介绍,参考javascript高级程序设计(第2版467页-- 470页 定时器有关章节)

相关文章

  • setTimeout 之callee用法

    var noticeObj = { type: 1, timeBegin: '2014-11-22 10:10:0...

  • setTimeout实现setInterval功能

    注意:是在setTimeout中递归调用setTimeout。使用arguments.callee来调用自身是不行...

  • 记一次UC的面试

    1. setTimeout setInterval setImmediate setTimeout定义与用法:...

  • arguments.callee用法  

    arguments.callee用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数。 一...

  • 定时器

    setTimeout和clearTimeout基本用法 setInterval和clearInterval基本用法...

  • JavaScript基础 定时器

    setTimeout() 定时只执行一次 用法:setTimeout( x , 1000 ); ===> 100...

  • setTimeout用法

    JS定时延时执行代码的功能就是定时器,主要是setTimeout()和setInterval(),它们都是wind...

  • setTimeout用法

    定时器 JavaScript提供定时执行代码的功能叫做定时器(timer),主要有SetTimeout()和set...

  • 2018-04-02播放伴奏问题

    播放原唱函数 开始录音绑定函数 setTimeout的用法 setTimeout(函数名,时间,函数的参数1,函数...

  • arguments.callee用法

    arguments.callee 在哪一个函数中运行,它就代表哪一个函数。 一般用在匿名函数中。 在匿名函数中有时...

网友评论

    本文标题:setTimeout 之callee用法

    本文链接:https://www.haomeiwen.com/subject/aykwtttx.html