javascript - es6 箭头函数在转译为 javascript 后无法识别此运算符

标签 javascript node.js typescript ecmascript-6

我正在开发一个从 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/

相关文章:

javascript - 如何监控输入的变化

javascript - 在更改上一个选择框中的相同项目时禁用项目

javascript - 如何在 Typescript 中声明模块的全局变量?

typescript - 我如何告诉 TypeScript 动态添加属性?

macos - 如何使用 Tomcat 运行 Angular 2 形式的 IntelliJ?

javascript - Math.min 只选择数组中第一个相同的值,我怎样才能让它找到其他值?

javascript - 字符串转json数组

sqlite - NodeJS + AppJS + Sqlite3

node.js - 使用 Node-Cron 每 45 分钟运行一次 Cron 作业

node.js - Square API 截断价格?