我正在尝试使用通用记录器编写一个新的打字稿类,如下所示:
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;
}
当我们进入函数时,对this._logger.logInfo的调用工作正常,但。总是显示以下错误:
未捕获的TypeError:无法读取未定义的属性'logInfo'
有什么办法可以使this._logger在.fail,.always和.done中可用?
答案 0 :(得分:1)
this
的上下文因您的功能而改变。如果将它们转换为箭头功能,您的this
将不会更改。
类似的东西应该起作用。
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;
}