我正在开发一个从 typescript es6 转换为 javascript es6 的 Node 应用程序。我正在使用 inversify 将类依赖项注入(inject)到适当的类中。当我尝试使用 this 运算符访问成员变量时,出现以下错误:“TypeError:无法读取未定义的属性“organizationMemberRepository””。我注意到在移动到箭头函数并删除“that = this”逻辑之后我开始收到此错误,并且我正在 Docker 容器中运行 Node 。这是转译后的 JavaScript 文件:
"use strict";
let OrganizationMemberService = class OrganizationMemberService {
constructor(organizationRepository, organizationMemberRepository, authorizationService) {
this.authenticateUser = (userName, password) => {
return new Promise(function (resolve, reject) {
console.log('about to check if user exists.....');
this.organizationMemberRepository.findMemberByUserName(userName)
.then(function (organizationMember) {
if (organizationMember) {
organizationMember.comparePassword(password)
.then(function (same) {
if (same) {
let returnedObj = JSON.parse(JSON.stringify(organizationMember));
resolve(returnedObj);
}
else {
reject(new genericerror_1.GenericError("You username/password combination is incorrect."));
}
})
.catch(function (err) {
reject(err);
});
}
else {
reject(new genericerror_1.GenericError("You username/password combination is incorrect."));
}
});
});
};
this.organizationRepository = organizationRepository;
this.organizationMemberRepository = organizationMemberRepository;
this.authorizationService = authorizationService;
}
};
OrganizationMemberService = __decorate([
inversify_1.injectable(),
__param(0, inversify_1.inject(types_1.TYPES.IOrganizationRepository)), __param(1, inversify_1.inject(types_1.TYPES.IOrganizationMemberRepository)), __param(2, inversify_1.inject(types_1.TYPES.IAuthorizationService)),
__metadata("design:paramtypes", [Object, Object, Object])
], OrganizationMemberService);
exports.OrganizationMemberService = OrganizationMemberService;
我认为 es6 箭头运算符应该解决无法正确访问 this 运算符的问题?
最佳答案
您需要将所有 .then(function () {
语法更改为 .then(()=> {
在this
正常工作之后,请参阅下面我的更改
let OrganizationMemberService = class OrganizationMemberService {
constructor(organizationRepository, organizationMemberRepository, authorizationService) {
this.authenticateUser = (userName, password) => {
return new Promise( (resolve, reject) => {
console.log('about to check if user exists.....');
this.organizationMemberRepository.findMemberByUserName(userName)
.then( (organizationMember) => {
if (organizationMember) {
organizationMember.comparePassword(password)
.then( (same) => {
if (same) {
let returnedObj = JSON.parse(JSON.stringify(organizationMember));
resolve(returnedObj);
}
else {
reject(new genericerror_1.GenericError("You username/password combination is incorrect."));
}
})
.catch((err) => {
reject(err);
});
}
else {
reject(new genericerror_1.GenericError("You username/password combination is incorrect."));
}
});
});
};
this.organizationRepository = organizationRepository;
this.organizationMemberRepository = organizationMemberRepository;
this.authorizationService = authorizationService;
}
};
关于javascript - es6 箭头函数在转译为 javascript 后无法识别此运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47661924/