请求竞态
type
status
date
slug
summary
tags
category
icon
password
Blocking
Blocked by
top
URL
Sub-item
Parent item
问题
前端竞态问题即多个异步事件同时修改同一变量或状态。由于这些事件在不同的时间点完成,它们可能会相互干扰,导致数据被错误地修改或读取。
举一个例子:
- 有一个分页列表,快速地切换第二页,第三页;
- 先后请求 data2 与 data3,分页器显示当前在第三页,并且进入 loading;
- 但由于网络的不确定性,先发出的请求不一定先响应,所以有可能 data3 比 data2 先返回;
- 在 data2 最终返回后,分页器指示当前在第三页,但展示的是第二页的数据。
解决问题思路
- 当发出新的请求时,取消掉上次请求即可。
- 限制并发请求。
串行请求
通过并发请求限制,使后面的重复请求变为串行,保证数据为最后一个请求。
缺点:
拉长请求时间:需要等候前面的请求(无效请求)执行完毕,才能执行最后的请求(有效请求)。
取消请求
- 通过axios提供的cancelToken
- 封装一个取消请求的Promise对象。
数据校验
每次请求生成唯一key,每次请求结束后验证key。