Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vue条件轮询_Javascript_Vue.js_Vuejs2 - Fatal编程技术网

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
    }
});