Вызов clearInterval в консоли браузера в Chrome - PullRequest
0 голосов
/ 07 мая 2018

Я запускаю этот код JS в консоли браузера, чтобы отображать некоторые имена из таблицы с интервалом в 4 секунды. После того как цикл запустится X раз, он должен очистить интервал.

$(document).ready(function() {
    for(var j = 0; j < 2; j++) {
        var refreshIntervalId = setInterval(function(){var td = $("tr td:first-child");
            for (var i = 6; i < 26; i++){
                console.log(td[i].innerText);
            }},4000);
        $("#idc4").click();
    }
    clearInterval(refreshIntervalId);
});

Я сохранил идентификатор интервала в переменной refreshIntervalId, и после цикла с этим идентификатором я вызываю функцию clearInterval, но мой интервал продолжает работать, отображая те же имена в консоли. Переменная вне области? Или у консоли браузера есть некоторые ограничения, когда дело доходит до этого?

1 Ответ

0 голосов
/ 07 мая 2018

Вам нужны интервалы, чтобы остановить себя после того, как они были вызваны X раз.

Так что вам нужно немного изменить логику вашего кода. Потому что сейчас ваш цикл for в сочетании с использованием var будет заменять ваш intervalId каждый раз, когда вы выполняете цикл.

Я ввел объект intervalContext, который содержит intervalId и количество его вызовов. Связывая его с интервалом, каждый интервал имеет свой интервалContext.

// how many times will the interval be called :
var numberOfCalls = 3;

for (var j = 0; j < 2; j++) {
    // initiating a new intervalContext
    var intervalContext = {};    
    intervalContext.called = 0;
    // storing the intervalId in the intervalContext so the interval can clear itself 
    intervalContext.intervalId = setInterval((function() {
        // the intervalContext object will be referenced by 'this'
        this.called++;

        for (var i = 6; i < 26; i++) {
            console.log("looping i = " + i);
        }

        if (this.called > numberOfCalls) {
            console.log("Interval cleared. ID=", this.intervalId);
            clearInterval(this.intervalId);
        }
    }).bind(intervalContext), 1000); // binding the interval to the intervalContext
    console.log("Interval started. ID=" + intervalContext.intervalId);

}
...