RequestGuardController
setupRequestGuard 返回的 RequestGuardController 提供以下方法,用于运行时动态管理配置和状态。
方法列表
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
configure(options) | RequestGuardOptions | this(链式调用) | 更新全局配置(defaults / rules / notify / logger) |
setRules(rules) | GuardRuleInput[] | this | 覆盖全局规则(替换全部) |
addRule(rule) | GuardRuleInput | this | 追加一条规则(不影响已有规则) |
clearRules() | 无 | this | 清空所有规则(不释放已在途的能力状态) |
clearState() | 无 | this | 清空所有能力状态(取消等待方、释放在途记录) |
getStateSnapshot() | 无 | StateSnapshot | 获取当前状态快照(各能力的活跃状态数量) |
createLoadingKey(label?) | string | string | 创建当前运行期内唯一的 loadingKey |
isLoading(key) | string | boolean | 查询某个 loadingKey 当前是否处于执行中 |
subscribeLoading(key, listener) | string, (loading) => void | () => void | 订阅某个 loadingKey 的执行态变化 |
uninstall() | 无 | this | 卸载守护,恢复 axios 原始行为(仅 Axios 模式) |
使用示例
javascript
const requestManager = setupRequestGuard(axios, {
notify: (payload) => Toast.show(payload.message)
});
// ---- configure:运行时更新配置 ----
requestManager.configure({
defaults: {
duplicate: { strategy: 'reuse' } // 修改全局默认策略
},
logger: null // 关闭日志输出
});
// ---- setRules:覆盖全局规则 ----
requestManager.setRules([
{ method: 'post', duplicate: true },
{ url: /\/api\/query/, duplicate: { strategy: 'reuse' } }
]);
// ---- addRule:追加一条规则(不影响已有规则) ----
requestManager.addRule({
url: /\/api\/payment/,
duplicate: { strategy: 'block', message: '支付中,请勿重复点击' }
});
// ---- clearRules:清空全部规则 ----
requestManager.clearRules();
// ---- clearState:清空全部能力状态 ----
// 常用于路由切换、用户登出时,取消等待中的 reuse、释放在途记录
requestManager.clearState();
// ---- getStateSnapshot:查看当前状态 ----
const snapshot = requestManager.getStateSnapshot();
// 返回:{ total: 3, capabilities: { duplicate: { total: 2, policies: { block: 1, reuse: 1 } }, retry: { total: 1 } } }
console.log('当前活跃状态数:', snapshot.total);clearRules vs clearState vs uninstall
clearRules()只切断后续请求的规则来源,不释放已在途的能力状态。clearState()会真正清掉当前状态,并取消reuse等待方。- 要恢复 axios 安装前状态请使用
uninstall()。
熔断器手动控制
requestManager.circuitBreaker 提供熔断器的手动控制 API,详见 熔断守护 - 手动控制 API。
