前端竞态问题

什么是竞态问题

由于js是单线程执行的方式,因此对于一批网络请求,我们可以掌握其执行的顺序,但是其返回的顺序是我们不可控的。
因此,对于一些需要严格返回顺序的需求,例如分页、搜索等,我们需要考虑请求的竞态问题。

目前的两大解决方法

一、终止

也就是在本次请求发起前,终止上一次请求。
主要的实现原理是利用xhr的abort方法,对于axios来说,是利用让其内部调用reject与 xhr.abort,因此我们需要对reject的catch错误处理进行特殊判断。

二、忽略

也就是在本次请求发起过程中,忽略之前网络请求返回的结果。
主要的实现原理就是,每次请求之前生成一个request id,只接受本次id返回的执行结果。

利弊分析

终止:可以减少sever的消耗,减轻其压力。
忽略:不依赖请求的api,更加通用。