详细描述下:是后端同事发现的一个问题,当他在请求前调用了一个showLoading的方法,loding在页面上没有显示。打断点又可以显示出来。
我一一排查,代码没有问题。唯一一点就是他使用的是ajax同步请求,这会不会是导致loading显示端的原因呢?
TIP
GUI渲染线程与JS引擎线程是互斥的
因为js引擎可以修改DOM树,影响GUI的渲染,如果两者同时进行,那么可能得不到预期的结果。所以当js引擎在执行时,GUI会被保存到队列中,当js引擎空闲时,再执行。
同步请求阻塞了代码执行,使js引擎一直得不到空闲,队列中的GUI渲染就不会执行。当请求完成时,loding又被关闭。所以看起来,loding就根本没有显示过。将同步请求改为异步请求解决这个问题。或者说将请求和请求后的操作放到setTimeout里,让loading先显示出来,再执行同步请求(额,和异步有什么区别)。