Javascript Vue条件轮询
令牌有一个属性Javascript Vue条件轮询,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,令牌有一个属性syncStatus,可以是inProgress或completed。我想要一个条件轮询,它将一直调用API,直到syncStatus获得完成的值 我可以做这样的东西: var page = new Vue({ el: '#content-page', data: { token: null }, methods: {}, mounted: function () { //get token object f
syncStatus
,可以是inProgress
或completed
。我想要一个条件轮询,它将一直调用API,直到syncStatus获得完成的值
我可以做这样的东西:
var page = new Vue({
el: '#content-page',
data: {
token: null
},
methods: {},
mounted: function () {
//get token object from API
}
});
但我想一定有更好的方法来做到这一点
有什么建议吗?假设你没有商店 您可以添加一个数据属性来保存
syncStatus
的值,然后在装入的函数中有条件地调用api,以保持检查要更改的值。
然后,当syncStatus
的值发生变化时,添加一个观察者来施展魔法
类似这样的东西
data(){
返回{
syncStatus:'notStarted'//您应该考虑对此设置一个默认值
}
},
安装的(){
window.setInterval(()=>{
//有条件地调用api
如果(syncStatus=='inProgress'){
//调用api
}
},毫秒)
},
观察:{
syncStatus:函数(newValue){
//当值发生变化时使用魔法
}
}
如果没有充分的理由以最高速度进行轮询-您应该在AJAX调用之间设置一个延迟(例如使用setTimeout()
)是的,将有一个延迟,感谢您指出,在JavaScript中只有3种方法可以调度某些内容(如果我们排除Web Audio API中的高精度计时器)-setTimeout,setInterval和RequestAnimationFrame。对于您的用例,setTimeout
是最佳选择。
var page = new Vue({
el: '#content-page',
data: {
token: null
},
methods: {
//Method-get-token
//In axios.then if syncStatus is inProgress call this method again
},
mounted: function () {
//get token object from API
//if syncStatus is inProgress call method-get-token
}
});