how to set timeout in a vueJs method

2019-04-18 02:12发布

how I can use settimeout() function in a vuejs method?

I have already tried something like this, but it doesn't work

fetchHole: function () { 
    //get data
},

addHole: function () {
    //my query add new
    setTimeout(function () { this.fetchHole() }, 1000)
},

I get this Error message : Uncaught TypeError: this.fetchHole is not a function

5条回答
何必那么认真
2楼-- · 2019-04-18 02:36

The classic issue with contextual this in JavaScript.

The following part of code shows an easy solution - if you are using ES6 with Vuejs (default config with vuecli y babel). Use an arrow function

setTimeout(()=>{
   this.yourMethod()
},1000);
查看更多
The star\"
3楼-- · 2019-04-18 02:40

I think this works too.

var self = this;
setTimeout(function () { self.fetchHole() } , 1000)
查看更多
乱世女痞
4楼-- · 2019-04-18 02:41

Call recursive with TimeOut:

    save: function () {
      this.progressToProced = 0
      this.progress()          
    },
    progress: function () {
      if (this.progressToProced < 100) {
        this.progressToProced++
        setTimeout(function () { this.progress() }.bind(this), 100)
      }
    }
查看更多
beautiful°
5楼-- · 2019-04-18 02:55

Try this: setTimeout(this.fetchHole, 1000) because this in anonymous function is attached to that anonymous function not to your main function

查看更多
家丑人穷心不美
6楼-- · 2019-04-18 02:59

Add a bind() call to your function declaration:

setTimeout(function () { this.fetchHole() }.bind(this), 1000)

so that your Vue component's this is accessible within the function.

Side note: @nospor's accepted answer is cleaner in this particular situation. The bind approach is a bit more generalized - very useful if you want to do an anonymous function, for example.

查看更多
登录 后发表回答