Почему мой веб-работник перестает уменьшать таймер через пару секунд? - PullRequest
0 голосов
/ 09 января 2020

Я столкнулся с интересным событием.

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

Я кодировал скрипт WebWorker, который запускает тот же таймер.

работник. js

self.addEventListener("message", (e) => {
    if (e.data.task === 'run the timer') {
        currentTimeLeftInSession = e.data.defaultWorkTime;

        countdown = setInterval(() => {
            currentTimeLeftInSession--;
            currentTimeLeftInSessionBackwards++;
            if(currentTimeLeftInSession < 0) {
                return;
            }
            let timeLeft = getTimeLeft(currentTimeLeftInSession);
            let data = {
                'timeLeft': timeLeft,
            }
            self.postMessage(data);
        }, 1000);
    }

function getTimeLeft(seconds) {
    let minutes = Math.floor(seconds / 60);
    let remainderSeconds = Math.floor(seconds % 60);
    let timeLeft = `${minutes}:${remainderSeconds}`;

    if (remainderSeconds < 10) {
        timeLeft = `${minutes}:0${remainderSeconds}`;
        if (minutes < 10) {
            timeLeft = `0${minutes}:0${remainderSeconds}`;
        }
    }
    return timeLeft;
}
})

И добавил слушатель событий в скрипт pomodoro, который обновляет отображение таймера

pomodoro. js

let worker = new Worker('/lib/js/worker.js')
worker.addEventListener('message', (e) => {
        progressBar.text.innerText = e.data.timeLeft;
        console.log(e.data.timeLeft)
        if(e.data.timeLeft == '00:00') {
            playAudio(audioNumber);
        }

    });

 startButton.addEventListener('click', () => {
        defaultWorkTime = 200
        let data = {
            'task': 'run the timer',
            'defaultWorkTime': defaultWorkTime,
            'defaultBreakTime': defaultBreakTime,
        }
        worker.postMessage(data);
    });

Интересная вещь здесь:

Если я удалю console.log таймер перестает обновляться. Если я установил все это идет с планом.

Почему это происходит ???

Есть ли способ, что таймер не останавливается через пару секунд, если он работает на фоне?

...