Реагировать на собственный опрос - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь реализовать некоторый код API-опроса, это то, что я получил до сих пор:

async retrieveNotifications() {
  const res = await fetch(url)
  if (res.status === 200) {
    this.props.setNotifications(res.data)
  }
  setTimeout(() => {
    this.retrieveNotifications()
    // polling in 10 min cycles
  }, 600000);
}

код работает, однако вопрос в том, имеет ли это какие-либо недостатки в производительности, потому что он рекурсивный?Кто-нибудь знает лучшее решение для опроса в рН?Спасибо за помощь:)

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Это улучшенный код, предложенный в форме @bmovement, спасибо за вашу помощь: D

constructor() {
  super()
  // polling in 10 min cycles
  this.interval = setInterval(this.retrieveNotifications, 600000)
}

componentDidMount() {
  this.retrieveNotifications()
}

componentWillUnmount() {
  clearInterval(this.interval);
}

retrieveNotifications = async () => {
  const res = await fetch(url)
  if (res.status === 200) {
    this.props.setNotifications(res.data)
  }
}
0 голосов
/ 22 апреля 2019

Не уверен насчет производительности рекурсии здесь (или даже если замыкание setTimeout точно считается рекурсией), но вы можете использовать setInterval для вызова метода опроса каждые 10 минут, без необходимости последовательного соединения вызовов. И не забывайте использовать clearInterval , когда хотите остановить его!

Например:

async retrieveNotifications() {
    const res = await fetch(url)
    if (res.status === 200) {
        this.props.setNotifications(res.data)
    }
}

//inside some class method
setInterval(this.retrieveNotifications, 600000);
...