@grigorie1990

Как сделать задержку выполнения в асинхронной функции, которая вызывается каждую секунду?

Добрый день!
Как сделать задержку выполнения в асинхронной функции. Когда я добавляю clearTimeout(timerId); не работает функция, без него задержка работает только первый раз. Как сделать чтобы звдержка была бы каждый раз?

const {setIntervalAsync} = require('set-interval-async/dynamic');
  ...
  mounted(){
  ...
      this.interval();
        },
        methods: {
            interval: function () {
                setIntervalAsync(
                    async () => {
                        await this.changeAlert();
                    },
                    1000
                );
            },
            changeAlert: async function () {
                console.log(789);
                let timerId = setTimeout(() => {
                    if (this.alertArr.length > 0) {
                        this.alertCurrent = this.alertArr[0];
                        console.log(this.alertCurrent);
                    } else {
                        this.alertCurrent = null;
                    }
                    this.alertArr.splice(0, 1);
                }, 5000);
                 clearTimeout(timerId);
            },
        }
    }
  • Вопрос задан
  • 338 просмотров
Пригласить эксперта
Ответы на вопрос 2
john36allTa
@john36allTa
alien glow of a dirty mind
в changeAlert вы заводите таймер, в котором описываете коллбэк, а затем сразу сбрасываете таймер и коллбэк не срабатывает. Другими словами Вы дали машине кучу инструкций и тут же их отменили.
Не понятно чего хотите добиться, может это натолкнет Вас на верную мысль ;)
changeAlert: function() {
    console.log(789);
    return new Promise((resolve, reject)=>{
        let timerId = setTimeout(() => {
            if (this.alertArr.length > 0) {
                this.alertCurrent = this.alertArr[0];
                console.log(this.alertCurrent);
            } else {
                this.alertCurrent = null;
            }
            this.alertArr.splice(0, 1);
            resolve()
            if (false) reject("error description");
        }, 5000);
    })
}
Ответ написан
Комментировать
Возможно, это поможет:
data: () => ({
 interval: 0,
 counter: 0
}),
mounted () {
 this.start()
},
methods: {
 start () {
  this.counter = 0
  clearInterval(this.interval)
  this.interval = setInterval( () => {
    this.counter++
    console.log(this.counter)
  }, 1000)
 },
 stop () {
  this.counter = 0
  clearInterval(this.interval)
 }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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