项目场景:
一个电商平台的项目
问题描述
明明添加了token拦截器但是在购物车界面却还是显示没有token
export function httpRequestGetWithToken(url:string,params?:string):Promise<BaseResp>{
//获取token
let tokenValue = DPUtils.getValue('token')
async getValue(key:string){
if(!mDataPref){
await this.getDataPreference()
}
let value=''
const result=await mDataPref?.get(key,'');
if(result!==undefined){
value=result.toString()
}
return value
}
原因分析:
本来以为是token存储时有问题,但经过断点调试发现登录后token已经被存储。
后来又去查阅了资料,看到了一句话:await虽然是一个异步操作,但运行方式却和同步相似。
这一句话突然让我明白了,各位都知道,
同步是线程阻塞的,异步是非阻塞的,但await可以通知系统等待某某执行,而等待过程中恰好就是阻塞的,于是我产生了一个想法。。。。。。
解决方案:
export async function httpRequestGetWithToken(url:string,params?:string):Promise<BaseResp>{
//获取token
let tokenValue = await DPUtils.getValue('token')
只需要在获取token时添加一个await(想要使用await就必须有async),这样问题就解决了。
具体根据我的猜想应该是这样的:
promise本身就是一个异步操作,这样可能会导致网络请求的头部拦截器这一部分执行完之后才通过首选项拿到存储的token,这样的话自然会导致我的错误出现。
希望遇到类似问题可以帮到诸位。。。。。。。。。。
如果不了解Promise可以查看这篇文章,没有结合async和await使用,但有实际应用封装了一个移动端的SQLite
标签:let,string,因未,await,token,报错,result,async From: https://blog.csdn.net/chen2023_11_14/article/details/140878677