前端竞态问题
什么是竞态问题
由于js是单线程执行的方式,因此对于一批网络请求,我们可以掌握其执行的顺序,但是其返回的顺序是我们不可控的。
因此,对于一些需要严格返回顺序的需求,例如分页、搜索等,我们需要考虑请求的竞态问题。
目前的两大解决方法
一、终止
也就是在本次请求发起前,终止上一次请求。
主要的实现原理是利用xhr的abort方法,对于axios来说,是利用让其内部调用reject与 xhr.abort,因此我们需要对reject的catch错误处理进行特殊判断。
二、忽略
也就是在本次请求发起过程中,忽略之前网络请求返回的结果。
主要的实现原理就是,每次请求之前生成一个request id,只接受本次id返回的执行结果。
利弊分析
终止:可以减少sever的消耗,减轻其压力。
忽略:不依赖请求的api,更加通用。