Беда со временем в `setInterval` - PullRequest
0 голосов
/ 27 октября 2019

У меня проблема со временем. Вроде бы, но что-то идет не так, потому что в каждом изменении моей функции время «сокращается».

Итак, у меня есть функция, которая изменяет текст метки. Длительность функции отверстия - 19 сек.
(от 0 с до 4 с) - «Текст 1»
(от 4 с до 11 с) - «Текст 2»
(от 11 с до 19 с) - «Текст 3»

Затем это повторяется. И после нескольких итераций метка меняется с «Текст 1» на «Текст 2» менее чем за 4 с (~ 3 с - ~ 3,5 с)

function TextChanger() {

    clearInterval(timer);

    timer = setInterval((i => () => {

        const parts = { 0: 'Text 1', 4: 'Text 2', 11: 'Text 3' };

        if (parts[i]) console.log(parts[i]);

            else console.log(i); // 1s, 2s, 3s has passed

        i++;
        i %= 19;

    })(0), 1000);

}

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 октября 2019
Таймеры

не являются надежными, поскольку они выполняются в основном потоке с относительно низким приоритетом. Установите его на 900 мс и рассчитайте время с момента последнего изменения.

1 голос
/ 27 октября 2019

Я немного запустил функцию в консоли Chrome и получил следующие результаты:

Text 1
1
2
3
Text 2
5
6
7
8
9
10
Text 3
12
13
14
15
16
17
18
Text 1...

Это может быть проблема вне вашей функции, проблема, специфичная для вашего браузера, или я неЯ не понимаю вашу проблему.

Я переписал ваш код так, как написал бы, попробуйте этот формат:

function TextChanger() {
    clearInterval(timer)
    var i = 0;
    timer = setInterval( () => {
        const parts = { 0: 'Text 1', 4: 'Text 2', 11: 'Text 3' };

        if (parts[i])
            console.log(parts[i]);
        else
            console.log(i); // 1s, 2s, 3s has passed

        i++;
        i %= 19;
    }, 1000)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...