我似乎根本无法重新定义 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/