@anastasia__galkina

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

Есть миксин, который отвечает за вызов реста каждый 1000мс

const freqUpdateInMs = 1000

export default {
  data() {
    return {
      loading: false,
      items: {},
      timer: null
    }
  },
  mounted() {
    this.$store.commit('setLoading', true)
    this.fetchData()
      .then(() => {
        this.timer = setInterval(this.fetchData.bind(this), freqUpdateInMs)
      })
      .finally(() => {
          this.$store.commit('setLoading', false)
      })
  },
  beforeDestroy() {
    clearInterval(this.timer)
  }
}


Внутри компонента подключается этот миксин и вызывается в методах fetchData
methods:{
      fetchData(){
        this.loading=true;
        return DataApi.get(this.url)
        .then((data)=>{
          this.items=data;
          this.loading=false
        })
      },
}


Вопрос: как сделать так, чтобы следующий рест не вызывался, пока предыдущий не даст ответ. Сейчас из-за того, что ресты отвечают долго, образуется большая очередь
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
const freqUpdateInMs = 1000

export default {
  data() {
    return {
      loading: false,
      items: {},
      timer: null
    }
  },
  mounted() {
    const fetchData = () => {
      this.$store.commit('setLoading', true)
      this.fetchData()
        .finally(() => {
          this.timer = setTimeout(fetchData, freqUpdateInMs)
          this.$store.commit('setLoading', false)
        })
    }
    fetchData()
  },
  beforeDestroy() {
    clearTimeout(this.timer)
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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