不能在promise

时间:2018-05-22 07:58:16

标签: javascript vue.js promise

我正在使用vuejs开发一个应用程序。我想在promise中使用它,我希望能够在.then范围内调用函数或数据,为此我使用它。但是如果我在内部执行此操作,那么我会收到错误,即使我使用和箭头函数绑定范围,它似乎也会丢失。我该怎么办?

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 个答案:

答案 0 :(得分:2)

在实现承诺时使用箭头功能:

return new Promise((resolve) => { /* ... */ });

答案 1 :(得分:1)

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

更改return new Promise(function(resolve) {..

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

答案 2 :(得分:1)

尝试在promise之前创建一个var,如:     var self = this; 然后在promise

中使用 self 而不是 this