我遇到了清除我正在使用的逻辑中的间隔的问题。 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;
}
}
}
答案 0 :(得分:1)
当调用设置的间隔时,您将创建一个新的轮询间隔。 您需要先清除间隔,然后再创建一个新间隔。
private void EnableProfiling(string profilerConnection)
{
using (var conn = new SqlConnection(profilerConnection))
{
conn.Open();
var miniProfilersTableExists = conn.ExecuteScalar<int>("select case when exists((select * from information_schema.tables where table_name = 'MiniProfilers')) then 1 else 0 end");
if (miniProfilersTableExists != 1)
conn.Execute(SqlServerStorage.TableCreationScript);
}
Profiler.Settings.Storage = new SqlServerStorage(profilerConnection);
}
应改为
case SET_INTERVAL:
interval = setInterval(function() {
poll(true, interval);
}, 5000);
break;
答案 1 :(得分:1)
您实际上并未将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);