尽管赋值,Javascript 类属性仍返回未定义

标签 javascript class promise constructor properties

我似乎根本无法重新定义 authToken 属性,并且在构造函数的范围之外,无论我是在文件 1 还是文件中引用它,它都只是返回未定义2. 下面是一些示例代码。

文件1:

class Clazz {
    authToken;

    constructor() {
        getAuthToken().then((token) => {
            this.authToken = token;
        });
    }
}

const getAuthToken = () => {
    return new Promise((resolve, reject) => {
        adalcontext.acquireTokenWithClientCredentials(resourceapi, clientId, clientSecret, (error, tokenResponse) => {
            if (error) {
                reject(new Error(`Failed to authenticate: ${error.message}`));
            } else {
                resolve(tokenResponse.accessToken);
            }
        });
    });
};

文件2:

const clazz = new Clazz();

console.log(clazz.authToken) // => returns undefined

我尝试了很多不同的方法,但似乎都不起作用。任何帮助,将不胜感激。谢谢。

最佳答案

您尝试在异步操作中分配authToken之前访问它。让 authToken 成为一个 promise 并等待它实现:

class Clazz {
    authToken;

    constructor() {
        this.authToken = getAuthToken();
    }
}

...

// in a module or async function:

const clazz = new Clazz();

console.log(await clazz.authToken)

另一个选择是异步工厂:

class Clazz {

    static async create(){
        return new Clazz(await getAuthToken());
    }   

    authToken;

    constructor(authToken) {
        if(!authToken){
            throw new Error('Cannot create Clazz without authToken');
        }
        this.authToken = authToken;
    }
}

...

// in a module or async function:

const clazz = await Clazz.create();

console.log(clazz.authToken)

关于尽管赋值,Javascript 类属性仍返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76688635/

相关文章:

javascript - ngTable 不起作用,简单的例子 - 从官方网站复制

javascript - Vuetify 如何模糊、聚焦点击的碎片?

javascript - 简单的 jquery/javascript 切换 href

java - 如何使用另一个类的方法? (从Processing导出的android项目)

javascript - 为什么如果 `$q.all` 没有返回一个 Promise 数组,那么不会抛出异常吗?

promise - 如何检测多个pdf.js渲染任务已完成

javascript - Angular 1.5 $onChanges

javascript - 如何按数值对 2 个单独的数组进行排序?

C# 应用程序无法从 VB 类库中找到类型

javascript - 在 jQuery AJAX 中的 promise 方法之间传递变量