常用的请求
- XMLHTTPRequest
- fetch
- axios
- swr
- umi-requeist
- react-query
js 发起 http请求常用的方法
https://www.freecodecamp.org/chinese/news/the-most-popular-ways-to-make-an-http-request-in-javascript/
axios实现并发请求 https://apifox.com/apiskills/axios-all-requests/
请求数据
单个请求
并发请求,同时发送多个请求,并在所有请求完成后进行处理
依赖查询
延迟查询
嵌套查询
轮询
并发请求
- Promise.all
- Axios.all
并发请求时,要确保请求之间相互独立且不会互相干扰,否则可能会导致数据混乱或请求失败
并发请求可能会增加服务器的负担,请谨慎使用并在必要时使用节流或防抖来限制请求频率
import axios from 'axios';
const request1 = axios.get('/api/resource1');
const request2 = axios.get('/api/resource2');
// Promise 返回数组
Promise
.all([request1, request2])
.then(res => res)
// axios
axios
.all([request1, request2])
.then(axios.spread((response1, response2) => {
// 处理 response1 和 response2
}))
.catch((error) => {
// 处理错误
});
// async
fetchData()
async function fetchData() {
try {
const request1 = axios.get('/api/resource1');
const request2 = axios.get('/api/resource2');
// 处理 response1 和 response2
} catch (error) {
// 处理错误
}
}
axios.all
axios.all = promises => Promise.all(promises);
axios.spread = callback => {
return (array) => callback.appaly(null, array);
}
// apply 参数是数组,call 参数是单个序列
更新数据
- 表单 Submit提交时,按钮 disable 禁用,防止重复提交
- 实时搜索输入框做「防抖」处理,延迟发起搜索请求
- 编辑提交修改后,先「乐观更新」本地数据,再发起请求,而当服务端更新失败时 revert 本地数据变更
- 实时性要求高的数据定时 1 分钟「轮询」一次,同时在切换 Chrome Tab 和网络重连时都做一次更新
Swr, stale while revalidate HTTP 缓存失效策略
首先从缓存中返回数据(过期的),同时发送 fetch 请求(重新验证),最后得到最新数据
https://www.leezhian.com/web/base/cache-control-swr