clearTimeout(tt);
后,tt = setTimeout(function () {
停止工作。为什么?我有递归,当我手动执行getByClients时,我需要删除setTimeout的当前队列(如果存在)并执行新的setTimeout,而不是clearTimeout(tt);
我什么都没得到。
var tt = undefined;
// in default select = null, only by btn click='getByClients(1)'
function getByClients(select) {
if (select == 1 || select == 2) {
clearTimeout(tt); // after, setTimeout is not executed
}
dashboardService.getByClients($scope.clientsMode).then(function(response) {
tt = setTimeout(function() {
getByClients(null);
}, refreshTime);
});
};
帮助,请某人(
答案 0 :(得分:1)
我不认为需要递归代码。也许你的样本太简单了? 如果我理解正确,您需要每隔X秒自动呼叫一次服务,但您希望能够强制立即呼叫。 在这种情况下,我会这样做:
var tt = null;
// - Stop current timer (is started)
function stopTimeout()
{
if(tt)
{
clearTimeout(tt);
tt = null;
}
}
// - Start a new Timer (and stops the previous one if any)
function startTimeout()
{
stopTimeout(); // - to clean if already started (security)
tt = setTimeout(function() {
getByClients();
}, refreshTime);
}
function getByClients()
{
// - Stop automatic Timer
stopTimeout();
// - Executes Query
dashboardService.getByClients($scope.clientsMode).then(function(response) {
// - "Read response "
// - Restart timer
startTimeout();
}
);
}
// - Start automatic calls
getByClients();
在这种情况下,不需要参数:每次调用都会停止当前的timeOut。 我认为更好的方法是使用setInterval,但我想要接近原始代码。
我的示例代码在手动更新后重新启动自动更新。我不知道这是否是你的需要?
编辑:我看到你使用AngularJS,或许超时会更符合你的需求吗?