clearTimeout(tt);
後,tt = setTimeout(function() {
停止工作。爲什麼?我有遞歸,當我手動執行getByClients時,我需要刪除setTimeout的當前隊列(如果存在)並執行新的setTimeout,而不是在clearTimeout(tt);
之後,我什麼也沒有。如何刪除settimeOut的隊列工作?
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);
});
};
幫助,有人請(
遞歸在JavaScript中通常不是一個好主意,這就是爲什麼他們創建了設置超時和循環。你也永遠不會調用最初的getByClients,所以它永遠不會開始運行,並且在第二個實例中,並且當它只有1時傳遞它兩個參數。此外,您的if語句不是雄蕊,因爲它代表了所有代碼,完全可能在清除setTimeout後清除 – Binvention
@Binvention,錯過了刪除函數的參數,用於示例 – AxOn
@Binvention「遞歸在JavaScript中通常不是一個好主意,這就是爲什麼他們創建設置超時和循環的原因。「這根本不是真的。這只是在編寫遞歸代碼時你必須小心。 –