@devfior

Как вызвать следующий interval после смены флага?

Есть setInterval функция, выполняющая определенное действие каждые 5 секунд:
setInterval(() => this.switchNextTab(), 5000);
Есть флаг isLoading который сменяется в true, если загружается запрос.
Ориентируясь на переменную isLoading, как вызвать следующий колбэк в setInterval, когда isLoading станет false?
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно «подглядывать» за изменениями свойства объекта.
Предлагаю не переменную isLoading, а свойство некого объекта изменять: flags.isLoading = false;

const PERIOD = 5000;
let timeout;

const action = () => {
  console.log('Action!');
  // this.switchNextTab()
  clearTimeout(timeout);
  timeout = setTimeout(action, PERIOD);
};

const flags = {
  _isLoading: false,

  set isLoading(value) {
    this._isLoading = value;
    if (!value) {
      // isLoading стал false
      action();
    }
  },

  get isLoading() {
    return this._isLoading;
  },
};

timeout = setTimeout(action, PERIOD);

// где-то в коде:
flags.isLoading = true;
// ...
flags.isLoading = false; // тут же выполнится action
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zkrvndm
@zkrvndm
Архитектор решений
Асинхронность вам поможет. Пример выполнения чего-либо каждые 1000 мс. пока истинно условие:
let uslovie = true;

(async () => {
    
    while (uslovie) {
        
        console.log('Тыц');
        
        await new Promise(s => setTimeout(s, 1000));
        
    }
    
})();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы