我在使用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;
允许在子范围中使用,但它已经检查过只有在使用回调时才这样做,而不是使用承诺。
我需要导入任何预设或任何其他东西才能使其正常工作吗?
答案 0 :(得分:0)
您可以在调用方法之前手动将this
指定给变量(与分配$q.defer()
的方式相同)。
requireAuthenticatedUser() {
let deferred = this.$q.defer();
var securityservice = this;
this.requestCurrentUser()
.then(
function (user) {
if (securityservice.isAuthenticated()) {