反应本机轮询

时间:2019-04-22 19:51:10

标签: 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中进行轮询的更好解决方案?感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

不确定递归对性能的影响(或者即使setTimeout闭包确实算作递归),但是您可以每10分钟使用setInterval调用一种轮询方法,而无需以菊花链方式电话。而且,当您要使其停止时,请不要忘记使用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);

答案 1 :(得分:0)

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