反应本机轮询
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)
}
}
我正在尝试实现一些 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)
}
}