Запустить содержимое SetTimeout при сбросе таймера - PullRequest
0 голосов
/ 18 марта 2020

У меня есть время ожидания:

 clockifyButton.popupTimer = setTimeout(() => {
          popup.style.display = "none";
          aBrowser.runtime.sendMessage(
            {
              eventName: "startWithDescription",
              description,
              subject: title,
              tracker,
              taskid,
              tag,
              projectId: clockifyButton.selectedProject.id
            },
            response => {
              if (response.code === 400) {
                alert(
                  "Can't end entry without project/task/description or tags.Please edit your time entry."
                );
              } else {
                active = true;
                setButtonProperties(button, title, active);
                clockifyButton.inProgressDescription = title;
                aBrowser.storage.sync.set({
                  timeEntryInProgress: response.data
                });
              }
            }
          );
        }, 5000);

И я ищу решение, как я могу отправить сообщение, когда я очищаюTimeout (popupTimer) из другого источника. Спасибо вперед !!!

1 Ответ

0 голосов
/ 18 марта 2020

Отмена тайм-аута предотвратит обратный вызов, поэтому вам нужно будет позвонить самостоятельно в тот момент, когда таймер отменен.

Попробуйте что-то вроде этого:

class CancelableWait {
    constructor(func, delay) {
        this.func = func;
        this._timer = setTimeout(() => this.cancel(), delay);
    }

    cancel() {
        if (this._timer) {
            clearTimeout(this._timer);
            this._timer = null;
            this.func();
        }
    }
}

console.log("Starting 5 second timer..");
let waiter = new CancelableWait(() => console.log("Fired!"), 5000);
setTimeout(() => {
    console.log("Cancelling..");
    waiter.cancel();
}, 2000);

Это вызовет обратный вызов только один раз, независимо от того, связано ли это с естественным завершением таймера или с явным вызовом cancel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...