Typescript类成员未定义

时间:2018-07-12 20:22:49

标签: jquery 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;
    }

当我们进入函数时,对this._logger.logInfo的调用工作正常,但。总是显示以下错误:

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

有什么办法可以使this._logger在.fail,.always和.done中可用?

1 个答案:

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