Debounce computed properties/getters in Vue Debounce computed properties/getters in Vue vue.js vue.js

Debounce computed properties/getters in Vue


As I mention in my comment, debouncing is an inherently asynchronous operation, and so cannot return a value. Depending on your needs, you might want to debounce on the input side. There will be no difference between the value in text and that in textComputed, but if you v-model="textComputed", the value setting will be debounced.

If you specifically want a debounced version of a variable, mrogers has given a good solution.

var x = new Vue({  el: '#app',  data: {    text: 'start'  },  computed: {    textComputed: {      get() {        return this.text;      },      set: _.debounce(function(newValue) {        this.text = newValue;      }, 500)    }  }})
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js"></script><script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script><div id="app">  <div>    Debounced input:    <input v-model="textComputed">  </div>  <div>    Immediate input:    <input v-model="text">  </div>  <div>computed: {{ textComputed }} </div>  <div>debounced: {{ text }} </div></div>