TypeScript异步函数调用返回Pending而非预期值问题求助
解决异步函数调用返回Pending Promise的问题
你的问题核心很清晰:generateToken是异步函数,调用时没加await,所以拿到的是处于Pending状态的Promise对象,而非实际生成的token值。哪怕你在其他地方加了await,但调用异步函数的那一行必须加await才能获取最终结果。
核心修改点
在createToken函数里,调用generateToken和refreshTokenGenerate时,必须加上await关键字:
修改后的createToken代码:
static createToken = async (userDetails: any) => { const config: any = await configHelper.getConfigData(); const conData: string = JSON.parse(config); const configdata = JSON.parse(conData); const accessTokenExpires = moment().add( configdata.jwt.accessExpirationMinutes, "minutes" ); // 给generateToken调用添加await,获取实际token值 const accessToken = { token: await this.generateToken(userDetails, accessTokenExpires), expires: accessTokenExpires.toDate(), }; console.log('$$$$$$$$$$$$$$', accessToken) const refreshTokenExpires = moment().add( configdata.jwt.refreshExpirationMinutes, "minutes" ); // 同理,refreshTokenGenerate如果是异步函数也需要加await const refreshToken = { token: await this.refreshTokenGenerate(userDetails, refreshTokenExpires), expires: refreshTokenExpires.toDate(), }; return { accessToken, refreshToken, }; };
额外优化建议
你在generateToken和createToken里重复执行了两次JSON解析操作,可以把这部分逻辑抽成单独的工具函数复用,减少冗余代码:
// 抽离的配置解析工具函数 static async getParsedConfig() { const config = await configHelper.getConfigData(); // 注意:如果config本身已经是JSON对象,可去掉一次JSON.parse,根据实际情况调整 return JSON.parse(JSON.parse(config)); }
之后在generateToken和createToken里直接调用这个函数即可,避免重复解析操作。
内容的提问来源于stack exchange,提问作者Sundar Anbu
相关产品推荐
相关产品推荐

