Jquery Typescript类成员未定义
我正在尝试使用通用记录器编写一个新的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
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的代码移植太晚了。谢谢你的帮助。