Jquery Typescript类成员未定义

Jquery Typescript类成员未定义,jquery,typescript,Jquery,Typescript,我正在尝试使用通用记录器编写一个新的typescript类,如下所示: export class ApiCaller { protected _logger: Logging; constructor() { this._logger = new Logging("ApiCaller "); } public async getData(url): Promise<IItem[]> { this._logger.lo

我正在尝试使用通用记录器编写一个新的typescript类,如下所示:

export class ApiCaller {

    protected _logger: Logging;
    constructor() {
        this._logger = new Logging("ApiCaller ");
    }

    public async getData(url): Promise<IItem[]> {
        this._logger.logInfo(url); // Logs without issue

        var result = await $.getJSON(url)
            .fail(function (jqxhr, textStatus, error) {
                var err = textStatus + ", " + error;
                this._logger.logError("Error: " + err);
                throw new Error(error);
            })
            .always(function () {                
                this._logger.logInfo("Always logs");
            })
            .done(function (data) {
                // processes and returns data
            });
        return result;
    }
导出类ApiCaller{
受保护的记录器:日志记录;
构造函数(){
此._logger=新日志(“ApiCaller”);
}
公共异步getData(url):承诺{
这是._logger.logInfo(url);//没有问题的日志
var result=await$.getJSON(url)
.fail(函数(jqxhr、textStatus、error){
var err=textStatus+“,”+错误;
此.u logger.logError(“错误:+err”);
抛出新错误(Error);
})
.always(函数(){
这个._logger.logInfo(“总是日志”);
})
.完成(功能(数据){
//处理和返回数据
});
返回结果;
}
当我们进入该函数时,对该._logger.logInfo的调用工作正常,但是.始终显示以下错误:

未捕获的TypeError:无法读取未定义的属性“logInfo”


我能做些什么使this.\u记录器在.fail、.always和.done内可用?

您的
上下文因您的函数而更改。如果您将它们转换为箭头函数,您的
将不会更改

像这样的东西应该有用

export class ApiCaller {

    protected _logger: Logging;
    constructor() {
        this._logger = new Logging("ApiCaller ");
    }

    public async getData(url): Promise<IItem[]> {
        this._logger.logInfo(url); // Logs without issue

        var result = await $.getJSON(url)
            .fail((jqxhr, textStatus, error) => {
                var err = textStatus + ", " + error;
                this._logger.logError("Error: " + err);
                throw new Error(error);
            })
            .always(() => {               
                this._logger.logInfo("Always logs");
            })
            .done(function (data) {
                // processes and returns data
            });
        return result;
    }
导出类ApiCaller{
受保护的记录器:日志记录;
构造函数(){
此._logger=新日志(“ApiCaller”);
}
公共异步getData(url):承诺{
这是._logger.logInfo(url);//没有问题的日志
var result=await$.getJSON(url)
.fail((jqxhr,textStatus,error)=>{
var err=textStatus+“,”+错误;
此.u logger.logError(“错误:+err”);
抛出新错误(Error);
})
.始终(()=>{
这个._logger.logInfo(“总是日志”);
})
.完成(功能(数据){
//处理和返回数据
});
返回结果;
}

这可能是因为您传递到
的函数失败了
并且
总是
改变了
这个
指向的内容。您可以尝试:使用箭头函数,将您的函数绑定到周围的上下文,或者在函数外部存储对
这个
的引用。您是说的范围不同吗nt,有没有办法让logger类成员在内部可用?总是吗?@Aaron,谢谢你,这就是问题所在,我希望你已经创建了这个答案,这样我就可以标记它了,不确定我怎么没有注意到,从Javascript到Typescript的代码移植太晚了。谢谢你的帮助。