记录一次错误,鸿蒙网络请求因未接收到token而报错

项目场景:

一个电商平台的项目


问题描述

明明添加了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

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值