我有一个错误字符串数组,这些错误是提交后表单中的错误。
我想在固定时间后(每5秒说一次)将这些错误显示为一个通知。
我拥有的代码是:
var array = ["1", "2", "3", "4", "5", "6"];
recursive();
function recursive() {
var error = array.pop();
if (typeof error === 'undefined') {
return;
} else {
console.log(error);
// showNoti(error);
}
setInterval(function() {
recursive()
}, 5000);
}
此代码的问题在于,它在前两个迭代中运行良好,在打印6秒钟后5秒钟打印出了5个。
但是在第三次迭代中,它同时打印字符串4和3。类似于第四次迭代。
如何修复它,以便每5秒打印一次数组中的每个元素?
答案 0 :(得分:3)
当前,每次recursive
的调用都在初始化另一个间隔。因此,例如,在第一次调用之后,将运行一个间隔:在第二次调用之后,将初始化另一个间隔(两个间隔),等等。
将setInterval
放在recursive
之外:
var array = ["1", "2", "3", "4", "5", "6"];
recursive();
function recursive() {
var error = array.pop();
if (typeof error === 'undefined') {
return;
} else {
console.log(error);
// showNoti(error);
}
}
setInterval(function() {
recursive()
}, 500);
或改用setTimeout
:
var array = ["1", "2", "3", "4", "5", "6"];
recursive();
function recursive() {
var error = array.pop();
if (typeof error === 'undefined') {
return;
} else {
console.log(error);
// showNoti(error);
}
setTimeout(recursive, 500);
}
答案 1 :(得分:2)
将setInterval
移到recursive
之外。每次运行recursive
时,您都在创建一个新的setInterval
var array = ["1", "2", "3", "4", "5", "6"];
recursive();
function recursive() {
var error = array.pop();
if (typeof error === 'undefined') {
return;
} else {
console.log(error);
// showNoti(error);
}
}
setInterval(recursive, 5000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 2 :(得分:1)
在所有递归调用中,都会初始化新的setInterval。将其移出递归函数或使用setTimeout
,
var array = ["1", "2", "3", "4", "5", "6"];
recursive();
function recursive() {
var error = array.pop();
if (typeof error === 'undefined') {
return;
} else {
console.log(error);
// showNoti(error);
}
}
setInterval(function() {
recursive()
}, 5000);
答案 3 :(得分:1)
select
t1.volume_band,
count(distinct(t1.user_id)
...
where count(distinct(t1.volume_band)) = 1
将启动一个无限重复的计时器。在这种情况下,您可以控制是否要在代码中重复。
这就是'setTimeout'的用途-一个延迟的执行。
将var chart = new google.visualization.LineChart(document.querySelector('#chartContainer'));
google.visualization.events.addListener(chart, 'error', function (googleError) {
google.visualization.errors.removeError(googleError.id);
//here you can write your custom message or nothing if you want remove
alert("error catch")
});
chart.draw(yourData, yourOptions);
更改为setInterval
setInterval