反应本机轮询

React Native Polling

我正在尝试实现一些 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);
}

代码有效,但问题是这是否有任何性能缺点,因为它是递归的?有谁知道在 rn 中进行轮询的更好解决方案?感谢您的帮助:)

不确定此处递归的性能影响(或者即使 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);

这是@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)
  }
}