@suchrile

Использование setTimeout в методах класса?

Есть класс Notify который рендерит уведомления, показывает их и скрывает через некоторое время. У него есть методы open() и close(). Метод open() вызывается при создании экземпляра класса, а close() внутри open() по setTimeout`у через 3 секунды. Если уведомление одно – все работает как надо, но если их 2 и больше – уведомления рендерятся все (они все есть в дом-дереве), но из-за setTimeout`ов (предположительно), открывается и закрывается только последнее. Если сделать console.log() в методе, то он вызывается столько раз, сколько уведомлений рендерится, т.е. вызывается он точно. Что я делаю не так?

https://jsfiddle.net/suchrile/xph9bw65/4/

open(type) {
    if (type === 'modal') {
      this.$body.querySelector('.modal').classList.add('open')
    } else {
      this.$el.classList.add('open')
      setTimeout(() => this.close(type), 3000)
    }
  }

close(type) {
    if (type === 'modal') {
      this.$el.querySelector('.modal').classList.remove('open')
      document.querySelector('body').classList.remove('no-scroll')
    } else {
      this.$el.classList.remove('open')
    }
  }

const modal2 = new Modal('notify1', {
  type: 'notify',
  notifyStatus: 'success',
  title: 'Задача создана!'
})

const modal3 = new Modal('notify2', {
  type: 'notify',
  notifyStatus: 'danger',
  title: 'Задача удалена!'
})
  • Вопрос задан
  • 169 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы