请求竞态
请求竞态
踩坑|2022-12-15|最后更新: 2024-2-5
type
status
date
slug
summary
tags
category
icon
password
Blocking
Blocked by
top
URL
Sub-item
Parent item

问题

前端竞态问题即多个异步事件同时修改同一变量或状态。由于这些事件在不同的时间点完成,它们可能会相互干扰,导致数据被错误地修改或读取。
举一个例子:
  • 有一个分页列表,快速地切换第二页,第三页;
  • 先后请求 data2 与 data3,分页器显示当前在第三页,并且进入 loading;
  • 但由于网络的不确定性,先发出的请求不一定先响应,所以有可能 data3 比 data2 先返回;
  • 在 data2 最终返回后,分页器指示当前在第三页,但展示的是第二页的数据。

解决问题思路

  1. 当发出新的请求时,取消掉上次请求即可。
  1. 限制并发请求。

串行请求

通过并发请求限制,使后面的重复请求变为串行,保证数据为最后一个请求。
缺点:
拉长请求时间:需要等候前面的请求(无效请求)执行完毕,才能执行最后的请求(有效请求)。

取消请求

  • 通过axios提供的cancelToken
  • 封装一个取消请求的Promise对象。

数据校验

每次请求生成唯一key,每次请求结束后验证key。
 

扩展

面试技巧require 动态引入问题
Loading...