You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在类的异步Promise中访问类变量test的问题求助

在TypeScript类的Promise回调中访问类成员变量的问题

问题场景

在TypeScript的Test类中,getTest方法内的Promise回调函数无法访问类实例变量test,运行时抛出以下错误:

TypeError: Cannot read properties of undefined (reading 'test')

原代码如下:

export class Test {
    test: string;

    constructor() {
        this.test = "123";
    }

    async getTest() {
        return new Promise(async function(resolve, reject) {
            try {
                console.log(this.test);
            }
            catch(err) {
                console.log(err);
            }
        })
    }
}

解决方案

方法1:使用箭头函数(推荐)

箭头函数不会绑定自身的this,会继承外层上下文(即getTest方法所属的类实例)的this,修改后代码如下:

export class Test {
    test: string;

    constructor() {
        this.test = "123";
    }

    async getTest() {
        return new Promise(async (resolve, reject) => {
            try {
                console.log(this.test); // 正常输出"123"
                resolve(this.test);
            } catch(err) {
                console.log(err);
                reject(err);
            }
        })
    }
}

方法2:提前保存this到变量

在Promise回调外将类实例的this赋值给一个变量(比如self),回调内通过该变量访问类成员:

export class Test {
    test: string;

    constructor() {
        this.test = "123";
    }

    async getTest() {
        const self = this;
        return new Promise(async function(resolve, reject) {
            try {
                console.log(self.test); // 正常输出"123"
                resolve(self.test);
            } catch(err) {
                console.log(err);
                reject(err);
            }
        })
    }
}

方法3:用bind绑定this

通过bind方法将类实例的this绑定到Promise的回调函数上:

export class Test {
    test: string;

    constructor() {
        this.test = "123";
    }

    async getTest() {
        return new Promise(async function(resolve, reject) {
            try {
                console.log(this.test); // 正常输出"123"
                resolve(this.test);
            } catch(err) {
                console.log(err);
                reject(err);
            }
        }.bind(this))
    }
}

原因说明

普通函数作为Promise回调时,this的指向由函数的调用方式决定,在严格模式下会指向undefined;而箭头函数会捕获外层函数(getTest)的this,也就是类的实例对象,因此能正确访问到test变量。

内容的提问来源于stack exchange,提问作者QreatyMeaty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 11:27:39