在babel的承诺范围内使用这个

时间:2016-09-27 16:44:42

标签: javascript angularjs promise babel

我在使用Babel时遇到了一个我无法解决的问题。

问题是我在类方法中使用promises,我需要访问promise中调用类函数的类的这个对象。

代码是

class SecurityService {
    constructor($q) {
        this.$q = $q;
    }

    isAuthenticated() {
        return true;
    }

    requestCurrentUser() {
        return this.$q.when({});
    }

    requireAuthenticatedUser() {
        let deferred = this.$q.defer();

        this.requestCurrentUser()
        .then(
          function (user) {
            if (this.isAuthenticated()) {
              this.$log.debug('Security: Access granted for user.');
              return deferred.resolve(user);
            }

            return deferred.reject();
          }
        );
    }
}

当我调用requireAuthenticatedUser方法时,它在执行this.isAuthenticated()时失败,因为它试图在promise范围内找到它。

Babel通常将此变量包装在较高的范围变量中,执行以下操作:

  

var _this4 = this;

允许在子范围中使用,但它已经检查过只有在使用回调时才这样做,而不是使用承诺。

我需要导入任何预设或任何其他东西才能使其正常工作吗?

1 个答案:

答案 0 :(得分:0)

您可以在调用方法之前手动将this指定给变量(与分配$q.defer()的方式相同)。

requireAuthenticatedUser() {
  let deferred = this.$q.defer();
  var securityservice = this;

        this.requestCurrentUser()
        .then(
          function (user) {
            if (securityservice.isAuthenticated()) {