JavaScript:如何防止setIntegal触发多线程
JavaScript: How to prevent setInteval to trigger multi thread
我想创建一个计时器,在每个X秒之后,应该会发生一个请求;
在X秒后,请求发生了,但如果我停止计时器,然后重新启动它,我认为我得到了2个线程的执行,因为每次我停止并重新启动计时器时,请求都会更快;
我该怎么解决这个问题?
<script>
var SingletonClass = SingletonClass ? SingletonClass : function() {
var apiUrl = '<?php echo Yii::app()->baseUrl; ?>';
var int;
var offset;
var reset_time_in_secconds = 1;
var f = function()
{
};
f.prototype = {
fnAddRow: function(data) {
offset = data.created;
$('#example').dataTable().fnAddData([
data.id + '.0',
data.type + ".1",
data.level + ".2",
data.msg + ".3",
data.code + ".4",
data.created + ".5"]);
},
clockTick: function()
{
console.log('clock tick');
example_length_value = $('select[name="example_length"]').val();
$.ajax({
type: "POST",
url: '<?php echo Yii::app()->baseUrl; ?>' + '/index.php/admin/liveReports/inputNotificationLog/offset/' + offset + '/pageSize/' + example_length_value,
data: {'offset': offset, 'pageSize': example_length_value},
success: function(data) {
//console.log(data);
//$('.input').text(data);
if (data.length > 0)
{
$.each(data, function(index, value) {
//console.log(value);
//console.log(data[index]);
obj = value;
Singleton.fnAddRow(obj);
});
}
},
dataType: 'json'
});
},
stopClock: function()
{
console.log('stop clock');
int = window.clearInterval(int);
},
init: function()
{
console.log('init');
offset = <?php echo time(); ?>;
reset_time_in_secconds = $('#reset_time_in_secconds').val();
if (reset_time_in_secconds == '') {
reset_time_in_secconds = 1;
}
$('#demo').html('<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"></table>');
$('#example').DataTable({
"aaData": [
/* Reduced data set */
/* ["1", "Trident", "Internet Explorer 4.0", "Win 95+", 4, "X"], */
],
"aaSorting": [[0, "desc"]],
"aoColumns": [
{"sTitle": "id"} /* { "bSearchable": false, "bVisible": false } */,
{"sTitle": "type"},
{"sTitle": "level"},
{"sTitle": "msg"},
{"sTitle": "code", "sClass": "center"},
{
"sTitle": "created",
"sClass": "center",
"fnRender": function(obj) {
var sReturn = obj.aData[ obj.iDataColumn ];
if (sReturn == "A") {
sReturn = "<b>A</b>";
}
return sReturn;
}
},
]
});
int = setInterval(Singleton.clockTick, reset_time_in_secconds * 1000);
},
reinit: function()
{
Singleton.stopClock;
console.log('reinit');
offset = <?php echo time(); ?>;
reset_time_in_secconds = $('#reset_time_in_secconds').val();
if (reset_time_in_secconds == '') {
reset_time_in_secconds = 1;
}
int = setInterval(Singleton.clockTick, reset_time_in_secconds * 1000);
},
restartClock: function()
{
console.log('restart clock');
Singleton.reinit();
},
inBound: function(action, data)
{
try {
console.log('inbound');
switch (action)
{
case 'actiune':
console.log('actiune');
break;
default:
alert('Unknown inBound action: ' + action);
break;
}
} catch (err) {
if (consoleLog) {
//console.log(err.toString());
}
alert('Something went wrong, server returned invalid message!');
}
}, //end f inBound()
outBound: function(action)
{
try {
switch (action)
{//start switch
case 'logout':
//ceva
break;
default:
alert('Unknown outBound action: ' + action);
break;
}//end switch
}
catch (err) {
if (consoleLog) {
//console.log(err.toString());
}
alert('Something went wrong, couldn''t prepare data!');
}
}//end f outBound()
}
return f;
}();
var Singleton = new SingletonClass();
Singleton.init();
</script>
修复了该问题;
当重新调用时,我使用的是指针而不是方法:函数Singleton.stopClock而不是Singleton.stop Clock();
相关文章:
- javascript中的多线程
- Javascript支持多线程吗
- Doppio:多线程是如何工作的,有什么限制吗
- 为什么Javascript SetTimeout()不是多线程的
- 从多线程C++插件回调NodeJS Javascript函数
- 电子框架是否允许网络工作者进行多线程处理
- 如何使用并行/多线程Hamsters.js Javascript库编辑数组中的对象属性
- 是否可以使用多线程执行Javascript函数
- 使用不同选项卡的Javascript中的多线程
- IONIC是否支持用Java开发的多线程和调用jar库
- 纳肖恩多线程编程
- 节点JS单线程与多线程(CPU利用率:有什么区别吗?
- JavaScript 回调 - 多线程
- 有时,JavaScript是多线程的
- 使用多线程.js访问范围
- 这个 Web worker 代码是多线程的吗,我是否获得了什么
- Javascript 多线程两个窗口焦点
- AJAX 以多线程方式运行
- JavaScript 中的多线程
- JavaScript:如何防止setIntegal触发多线程