我在清除我使用的逻辑中的间隔时遇到了问题。clearInterval并没有像我想象的那样工作。关于如何将我的logiuc合并到下面,以便clearInterval可以工作,有什么建议吗?toggleInterval在更改时被调用。
var interval;
function toggleInterval(setting, interval) {
switch (setting) {
case SET_INTERVAL:
interval = setInterval(function() {
poll(true, interval);
}, 5000);
break;
case CLEAR_INTERVAL:
clearInterval(interval);
break;
}
}
function poll(polled, interval) {
if (!polled) {
$pollPromise = $.ajax({
url: '/stuff/',
});
$pollPromise.done(success);
function success(data) {
if (data.success) {
// .... DO stuff
toggleInterval(CLEAR_INTERVAL, interval);
}
return;
}
}
} 发布于 2015-07-21 02:57:45
当调用ever set interval时,您正在创建一个要轮询的新间隔。您需要先清除间隔,然后创建新的间隔。
case SET_INTERVAL:
interval = setInterval(function() {
poll(true, interval);
}, 5000);
break;应更改为
case SET_INTERVAL:
clearInterval(interval); <-----
interval = setInterval(function() {
poll(true, interval);
}, 5000);
break;发布于 2015-07-21 03:01:44
实际上,您并没有将setInterval()值存储在任何地方。
您的interval参数(一个局部变量)隐藏了var interval;声明,因此一旦toggleInterval()退出,该值就会丢失。返回值,以便调用者可以使用它来设置全局变量:
var interval;
function toggleInterval(setting, interval) {
switch (setting) {
case SET_INTERVAL:
return setInterval(function() {
poll(true, interval);
}, 5000);
case CLEAR_INTERVAL:
clearInterval(interval);
break;
}
}
function poll(polled, interval) {
if (!polled) {
$pollPromise = $.ajax({
url: '/stuff/',
});
$pollPromise.done(success);
function success(data) {
if (data.success) {
// .... DO stuff
toggleInterval(CLEAR_INTERVAL, interval);
interval = null;
}
return;
}
}
}
// elsewhere:
interval = toggleInterval(SET_INTERVAL);https://stackoverflow.com/questions/31524185
复制相似问题