Proxy.revocable用于创建可手动注销的代理对象,返回含proxy实例和revoke函数的对象;调用revoke后proxy立即失效,任何操作均抛出TypeError,且不可恢复,原target不受影响。

Proxy.revocable 用于创建一个**可随时手动注销**的代理对象,它返回一个包含 proxy 实例和 revoke 函数的对象。一旦调用 revoke,该 proxy 立即失效,后续任何操作都会抛出 TypeError。
基本创建方式
语法简洁明确:
const { proxy, revoke } = Proxy.revocable(target, handler);
返回的是一个解构对象,其中:
- proxy:可被使用的代理实例
- revoke:一个无参函数,调用后 proxy 立即不可用
注销后的行为表现
revoke 调用后,proxy 不再转发任何操作。哪怕只是读取一个属性,也会立即报错:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
const target = { x: 1 };
const { proxy, revoke } = Proxy.revocable(target, {
get(t, p) { return t[p]; }
});
console.log(proxy.x); // 1
revoke();
console.log(proxy.x); // TypeError: Cannot perform 'get' on a proxy that has been revoked
这个错误是**同步且不可恢复的**,不会影响原 target,只让 proxy 失效。
典型生命周期控制场景
适合在资源需限时、按需或条件触发释放时使用,例如:
- 临时权限控制:某次 API 调用中赋予对象临时可写能力,调用结束后立即冻结
- 测试隔离:为单元测试创建一个“一次有效”的代理,防止意外复用
- 定时清理:配合 setTimeout,在指定毫秒后自动注销(注意需确保 revoke 在作用域内可访问)
示例 —— 500ms 后自动注销:
const { proxy, revoke } = Proxy.revocable({ data: 'temp' }, {});
setTimeout(revoke, 500);
// 500ms 内可安全使用 proxy;超时后再访问会抛错
注意事项
几个关键细节容易忽略:
- revoke 只能调用一次,重复调用无效果(也不会报错)
- proxy 和 revoke 是强绑定关系,不能跨 proxy 复用 revoke
- 无法通过其他方式“恢复”已注销的 proxy,必须新建
- 原 target 对象始终不受影响,所有操作在 revoke 前仍正常作用于 target

















