метод вызова очень часто Vue JS - PullRequest
0 голосов
/ 15 июня 2019

Мне нужно вызывать функцию так часто, что я хочу обновлять данные так часто, поэтому мне нужно вызывать этот метод, я использую vue js.

в том жекак я хочу узнать, в каком свойстве vue js его найти, спасибо, я изучу все комментарии

Мне нужно вызывать метод listar () каждые 30 секунд

<script>
  export default {
    methods: {

            listar(){
            let me=this;
                me.mesas=[];
                axios.get('api/mesas/ListarTodos').then(function(response){
                    //console.log(response);
                    me.mesas=response.data;
                      me.loading=false;
                }).catch(function(error){
                    console.log(error);
                });



        },
}
</script>

Это не сработало для меня

setTimeout(() => {
         //
}, 300)

Обновление 1

этот код на самом деле работает для меня, но проблема в том, что он будет продолжать работать после переключения надругая страница, потому что это одностраничное приложение.

Я использую clearInterval (), но он не работает, метод продолжает работать, хотя я меняю страницу (компонент).Очистка очистки только при первом входе на другую страницу, а затем больше не

Ref -> https://renatello.com/vue-js-polling-using-setinterval/

<script>
import axios from 'axios'
  export default {

data () {
      return {
        polling: null,

       },
methods: {

        listar(){
                let me=this;
                    me.mesas=[];
                    axios.get('api/mesas/ListarTodos').then(function(response){
                        //console.log(response);
                        me.mesas=response.data;
                          me.loading=false;
                    }).catch(function(error){
                        console.log(error);
                    });



     pollData () {
      this.polling = setInterval(() => {

         this.listar();
       }, 3000) },

                },


 created () {
      this.pollData()

    },

 beforeDestroy () {
         clearInterval(this.polling)
    },
  }
</script>

1 Ответ

0 голосов
/ 15 июня 2019

Как сказал Иттус, вы должны использовать setInterval:

setInterval(() => {
    // call listen()
}, 30 * 1000);

setInterval возвращает объект, который вы можете передать clearInterval, чтобы прекратить вызывать listen.

Однако, если вы хотите учесть время запроса, вы также можете использовать setTimeout в блоке .finally в конце вашего запроса (обещания):

axios.get('api/mesas/ListarTodos').then(function(response){
    //console.log(response);
    me.mesas=response.data;
    me.loading=false;
}).catch(function(error){
    console.log(error);
}).finally(function(){
    setTimeout(/*call listen in a function*/, 30 * 1000);
});

Во всяком случае, это не имеет ничего общего с vuejs

...