记录一次异步导致导致res获取到的数据为空

Posted vieber

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录一次异步导致导致res获取到的数据为空相关的知识,希望对你有一定的参考价值。

问题代码

    res = JSON.parse(xhr.responseText);
    var img = new Image();
    img.onload = function() {
        document.body.appendChild(img);
        reslove(res);
    };
}

问题排查

在onload之前进行debug在每一个关键节点尽心打断点排查。

问题原因

在reslove(res);的时候res为空,但是在JSON.parse(xhr.responseText);的时候res是有值的。
所以问题是出现在onload里面。在onload的时候html文件中引入了一个js然后那个里面的js定义了一个也叫做res的全局变量,结果那个文件加载回来,把这个res赋值为空了。

导致后面取res.data失败了

至于说线下一直不复现可能是因为没有用cdn的问题,cdn的缓存策略和线下的不一致

问题总结

以后对于全局变量和异步的问题要格外注意,onload这种,promise,文件加载都要特别留心注意。

以上是关于记录一次异步导致导致res获取到的数据为空的主要内容,如果未能解决你的问题,请参考以下文章

接口异步调用导致的一个低概率问题引发的思考。

popBackStack导致一次又一次调用片段的oncreateView

ajax同步异步设置导致的问题及return返回值(返回ajax请求的数据)

91家纺网,十三次更新,用于测试数据库连接网页问题,由于会出现错误网站,导致接收到的值为空。

java中异步多线程超时导致的服务异常

pringboot热部署导致applicationContext获取为空