es6 arrow函数在传输到javascript后无法识别此运算符

es6 arrow函数在传输到javascript后无法识别此运算符,javascript,node.js,typescript,ecmascript-6,Javascript,Node.js,Typescript,Ecmascript 6,我正在开发一个从typescript es6传输到javascript es6的节点应用程序。我正在使用inversify将类依赖项注入到适当的类中。当我尝试使用this操作符访问成员变量时,我得到以下错误:“TypeError:无法读取未定义的属性'organizationMemberRepository'。我注意到,在移动到arrow函数并删除“that=this”逻辑之后,我开始收到这个错误,我正在docker容器中运行节点。以下是传输的javascript文件: "use strict"

我正在开发一个从typescript es6传输到javascript es6的节点应用程序。我正在使用inversify将类依赖项注入到适当的类中。当我尝试使用this操作符访问成员变量时,我得到以下错误:“TypeError:无法读取未定义的属性'organizationMemberRepository'。我注意到,在移动到arrow函数并删除“that=this”逻辑之后,我开始收到这个错误,我正在docker容器中运行节点。以下是传输的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 arrow操作符应该解决无法正确访问此操作符的问题?

您需要更改所有
。然后(函数(){
语法,改为
。然后(()=>{
在此之后,
正常工作,请参见下面我的更改

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;
    }
};

我认为当你调用Promise时,上下文会发生变化。Promise中的
this.
并不是指你认为它是的类。伙计,真的很难理解这里发生了什么。你能只发布代码的相关部分吗?你的这是在一个老式函数中(在箭头函数中).避免!这是一个旁白,但是你自己在回叫地狱里,即使你不应该使用承诺。每当你有承诺时,你应该回报他们,而不是在回报中立即处理他们。这样,你就解决了承诺应该解决的回叫地狱问题。