[英]setInterval javascript function being called many times
(请参阅底部的提琴手)我正在使用通话时间值。 当呼叫到达队列时,我会得到呼叫的到达时间,从那时起我开始计算呼叫在队列中等待了多长时间,目的是显示队列中等待时间最长的呼叫。 因此,如果我接到两个电话,首先我需要在计时器中显示第一个电话,当他们接听电话时,我需要为第二个电话的到达时间重置计时器并开始计数。 每当我在队列中接到新电话时,都会得到到达时间,然后使用从该时间开始的计时器。 我在这里遇到的问题是,我的函数被调用的次数与我拥有的调用次数相同,这使计时器同时增加了许多秒 。
HandleResponseGroupeQueues: function (interactionQueueId, availableAgents, queueArrivalTime) {
queueArrivalTime = parseInt(queueArrivalTime.substr(6)).toString();
if (queueArrivalTime.startsWith('-')) {
arrivalTimeField.text("00:00:00");
}
else {
// debugger;
var date = Math.round(new Date().getTime() / 1000.0); // current time in seconds
queueArrivalTime = Math.round(new Date(parseInt(queueArrivalTime)).getTime() / 1000.0); // call arrival time in seconds
var startTime = date - queueArrivalTime;
var timeSinceCallCameInQueue = toHHMMSS(startTime);
arrivalTimeField.text(timeSinceCallCameInQueue);
setTime = setInterval(function () { waitingCallstimer(arrivalTimeField); }, 1000); //here is my timer
}
if (arrivalTimeField.text() === "00:00:00") {
clearInterval(setTime);
我转换了使人可读的时间,即serInterval()
调用serInterval()
。 计时器如下所示:
function waitingCallstimer(arrivalTimeField) {
var textTime = arrivalTimeField.text();
var hours = textTime.substring(0, 2),
minutes = textTime.substring(3, 5),
seconds = textTime.substring(6, 8);
seconds = timeControl(parseInt(seconds) + 1);
if (seconds === 60) {
seconds = '00';
minutes = timeControl(parseInt(minutes) + 1);
if (minutes === 60) {
minutes = '00';
hours = timeControl(parseInt(hours) + 1);
}
}
timeControl(hours),
timeControl(minutes),
timeControl(seconds);
arrivalTimeField.text(hours + ':' + minutes + ':' + seconds);
而且timeControl()
仅在我得到的数字低于10时才添加0。是否有任何方法可以解决此问题或重做此代码以使其正确? !
http://jsfiddle.net/ye7on8Lq/ 看到这里! 通过单击按钮,计时器将快速运行
更新:分叉了JS小提琴,并使用调用数组http://jsfiddle.net/o7sdc77z/修复了此问题
更新:使用JS Fiddle中的代码更新。 这解决了该问题,并且进行了大量重构。
基本思想
callStartTimeArray
Curren call Done
按钮模拟),该通话的条目将从该数组中删除。 列表中的下一个由HandleResponseGroupeQueues
处理 arrivalTimeField
解析呼叫持续时间,而是使用变量currentCallTime
来跟踪当前呼叫的持续时间。 的HTML
<span class="time_1"></span>
<input type="button" id="add-btn" value="Add Call" />
<input type="button" id="remove-btn" value=" Current Call Done" />
JS
var callStartTimeArray = [];
var arrivalTimeField = $('.time_1');
var setTime;
var currentCallTime = 0;
function HandleResponseGroupeQueues(queueId, availableAgents, queueArrivalTime) {
if(setTime){
clearInterval(setTime);
}
if(!queueArrivalTime){
return ;
}
var date = Date.now(); // current time in milli seconds
var startTime = Math.round((date - queueArrivalTime)/1000);
var timeSinceCallCameInQueue = toHHMMSS(startTime);
arrivalTimeField.text(timeSinceCallCameInQueue);
setTime = setInterval(function () {
waitingCallstimer(arrivalTimeField); }, 1000);
}
function waitingCallstimer(arrivalTimeField) {
currentCallTime++;
arrivalTimeField.text(toHHMMSS(currentCallTime));
}
function timeToSeconds(time) {
var parts = time.split(':');
return (+parts[0]) * 60 * 60 + (+parts[1]) * 60 + (+parts[2]);
}
//converts seconds to total time
function toHHMMSS(sec) {
var secNum = parseInt(sec, 10);
var hours = timeControl(Math.floor(secNum / 3600)),
minutes = timeControl(Math.floor((secNum - (hours * 3600)) / 60)),
seconds = timeControl(secNum - (hours * 3600) - (minutes * 60));
var time = hours + ':' + minutes + ':' + seconds;
return time;
}
function timeControl(time) {
if (time ==='00') {
return time;
}
if (time < 10 ) {
time = '0' + time;
}
return time;
}
$('#add-btn').click(function(){
var currTime = Date.now();
callStartTimeArray.push(currTime);
if(callStartTimeArray.length == 1) {
HandleResponseGroupeQueues(1, 2, currTime);
}
console.log('Added one more call---', callStartTimeArray);
});
$('#remove-btn').click(function(){
callStartTimeArray.shift();
//reset the text in textfield
currentCallTime = 0;
arrivalTimeField.text("00:00:00");
//Handle the next call in Queue
HandleResponseGroupeQueues(1, 2,callStartTimeArray[0]);
console.log('After Last Call is done---', callStartTimeArray);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.