游戏编程研究院pomelo 游戏开发

setTimeout 之callee用法

2014-11-22  本文已影响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页 定时器有关章节)

上一篇下一篇

猜你喜欢

热点阅读