请求重试策略
策略类型
use hook
在使用扩展 hooks 前,确保你已熟悉了 alova 的基本使用。
请求失败可自动重试的 use hook,你可以将它用于重要的请求上。
特性
- 自定义重试次数或按条件判断是否需要重试;
- 重试延迟机制;
- 手动停止重试;
使用
基本用法
import { useRetriableRequest } from 'alova/client';
const {
// 加载状态,在重试期间一直为true,直到重试成功或失败
loading,
// 响应数据
data,
// 请求错误信息,每次请求或重试失败都将会有error实例
// 上一次的error实例将被覆盖
error,
// 每次请求或重试失败都将触发onError事件
onError,
// 请求重试事件,在每次重试请求发出后立即触发
onRetry,
// 请求重试失败事件
// 达到最大重试次数仍未请求成功,或手动停止重试都将触发
onFail,
// 请求或重试成功事件
onSuccess,
// 每次请求或重试,无论成功或失败都将触发完成事件
onComplete
} = useRetriableRequest(request);
useRetriableRequest
的最大请求重试次数默认为 3,且每次将延迟 1 秒重试。同时也会默认发出请求,可以通过设置immediate
为 false 改变行为。
设置静态的最大重试次数
最大重试次数表示首次请求失败后,最多重试请求的次数,期间如果请求成功的话将会停止继续重试。默认最大重试次数为 3 次,你可以通过以下方式自定义设置。
请求重试达到最大次数仍然未成功时,将会触发onFail
事件并停止请求重试,如果你在失败后希望继续重试,可以调用send
函数,此时它将进行新一轮的请求和重试。
const { send } = useRetriableRequest(request, {
// ...
// 设置最大重试次数为5
retry: 5
});
动态设置最大重试次数
可能有时候你希望通过某个条件来判断是否需要继续重试,此时你可以将retry
设置为返回 boolean 值的函数,来动态判断是否继续重试。
useRetriableRequest(request, {
// ...
// 第一个参数为上一次的错误实例,从第二个参数开始为send传入的参数
retry(error, ...args) {
// 请求超时则继续重试
return /network timeout/i.test(error.message);
}
});
设置延迟时间
默认重试延迟时间为 1 秒,你可以通过以下方式自定义设置。
useRetriableRequest(request, {
// ...
backoff: {
// 设置延迟时间为2秒
delay: 2000
}
});
设置不固定的重试延迟时间
有时候你希望每次请求延迟时间都不是固定的,你可以按以下方式设置延迟增长倍数,延迟时间将按重试次数指数增长。
useRetriableRequest(request, {
// ...
backoff: {
delay: 2000,
// multiplier设置为2时,第一次重试延迟为2秒,第二次为4秒,第三次为8秒,以此类推。
multiplier: 2
}
});
还不够?你甚至还可以为每次延迟时间增加随机抖动值,让它看着不那么规律。
useRetriableRequest(request, {
// ...
backoff: {
delay: 2000,
multiplier: 2,
/**
* 延迟请求的抖动起始百分比值,范围为0-1
* 当只设置了startQuiver时,endQuiver默认为1
* 例如设置为0.5,它将在当前延迟时间上增加50%到100%的随机时间
* 如果endQuiver有值,则延迟时间将增加startQuiver和endQuiver范围的随机值
*/
startQuiver: 0.5,
/**
* 延迟请求的抖动结束百分比值,范围为0-1
* 当只设置了endQuiver时,startQuiver默认为0
* 例如设置为0.8,它将在当前延迟时间上增加0%到80%的随机时间
* 如果startQuiver有值,则延迟时间将增加startQuiver和endQuiver范围的随机值
*/
endQuiver: 0.8;
}
});
手动停止重试
因某些情况需要手动停止重试,无论当前正在请求中,还是在等待下一次重试,你都可以使用stop
来停止它。
const { stop } = useRetriableRequest(request, {
// ...
});
const handleStop = () => {
stop();
};
API
Hook 配置
继承useRequest所有配置。
名称 | 描述 | 类型 |
---|