开发者社区> 问答> 正文

Ant-Design-Pro请求类request中对localStorage数据有延迟

先来走一遍流程

问题追踪

一 、保存

1555565319_1_

这是我登录成功后,将token保存到localStorage中.

二 、输出

保持token之后跳转到控制台页面,控制台的布局组件 BasicLayout.js 会在componentDidMount方法中发送一条获取当前用户信息的请求

__20190418133354

看下图我们可以知道控制台这边是正常输出的,但是访问的接口报401错误
__20190418133544

去浏览器查看参数后发现原因是token为空,

__20190418133843

我们再来看一下request.js请求类

__20190418133914

分析:

原因可以很直观的看出来,是request使用localStorage.getItem("token")时没有获取到数据,但是我在BasicLayout中却是可以获取到了. 很疑问.

再者,我刷新浏览器地址后,request竟可以获取到token了.

难道说我登录后跳转时不能使用 yield put('/')); ,而是得用window.location.href跳转???

展开
收起
vver 2019-04-18 13:44:16 8484 0
2 条回答
写回答
取消 提交回答
  • 今天测试也发现这个问题 在网上找了一下没找到答案(没仔细找 看了下百度。。。)看到你的问题 然后 有空的时候 我就去看了下源码 umi-reques 的包

    var extend = function extend(initOptions) {
      return request(initOptions);
    };
    ......
    var request = function request() {
      var initOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      var coreInstance = new Core(initOptions);
    
      var umiInstance = function umiInstance(url) {
        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    
        var mergeOptions = objectSpread({}, initOptions, options, {
          headers: objectSpread({}, initOptions.headers, options.headers),
          params: objectSpread({}, getParamObject(initOptions.params), getParamObject(options.params)),
          method: (options.method || initOptions.method || 'get').toLowerCase()
        });
    
        return coreInstance.request(url, mergeOptions);
      };
    

    答案很明显了 设置 options.headers 或重新 extend 是 request 初始化

    2019-11-11 21:42:00
    赞同 展开评论 打赏
  • 此人很牛

    补充一下:

    1. 所有请求是异步的.
    2. 登录成功后使用window.location.href跳转没问题.
    2019-07-17 23:33:41
    赞同 1 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载