我正在尝试实现一些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中进行轮询的更好解决方案?感谢您的帮助:)
答案 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)
}
}