setTimeout 之callee用法
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页 定时器有关章节)