代码之家  ›  专栏  ›  技术社区  ›  Rasim Avcı

不能在承诺内的setinterval内使用此项[重复]

  •  0
  • Rasim Avcı  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我正在用Vuejs开发一个应用程序。我想在一个承诺中使用这个,我想能够调用一个函数或数据,然后在范围内,为此我使用这个。但如果在中执行此操作,则会得到一个错误,即使使用和箭头函数绑定作用域,此错误似乎也会丢失。我能做什么?

    javascript
      methods: {
        ...mapActions(['setCredentials']),
        doLogin() {
          console.log('credentials ' + this.username, this.password);
          this.$store.dispatch('connect', {
            username: this.username,
            password: this.password,
          });
    
          this.checkResult().then((interval) =>  {
            vm.$f7router.navigate('/favorites');
    
          })
    
    },
        checkResult() {
        return new Promise(function(resolve) {
    
            var id = setInterval( () => {
                    let condition = this.$store.state.isConnected
                       if (condition) {
                        clearInterval(id);
                        resolve(id);
                    }
    
                setTimeout(() => {
                    clearInterval(id);
                    reject(id);
                }, 20000);
            }, 10);
        });
    }
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   BlackBeard    6 年前

    错误是由于上下文绑定造成的。您可以使用箭头函数 this 它们自己的属性(它们依赖于其父函数的 属性)。

    变化 return new Promise(function(resolve) {..

    return new Promise((resolve) => {..

        2
  •  2
  •   Faly    6 年前

    声明承诺时使用箭头功能:

    return new Promise((resolve) => { /* ... */ });
    
        3
  •  1
  •   Simone Cremasco    6 年前

    尝试在承诺之前创建一个VaR,比如: var self = this; 然后使用 自己 而不是 在承诺中