取消请求
cancel 用来取消指定 connectId 上当前仍在执行的 SDK 请求。它适合放在用户主动终止、页面卸载清理、或长时间等待的签名流程超时保护里使用。
调用 cancel(connectId) 不会物理断开设备连接。它只会中止当前挂起的请求,并触发关闭窗口类 UI 事件,例如 ui-close_window。应用侧应同步关闭 PIN、Passphrase、设备确认等界面。
ukeySdk.cancel(connectId);
入参
connectId- 必填string。目标设备的连接标识,通常来自 搜索设备 的返回结果。
常见使用场景
- 用户在弹窗中点击“取消”,不再继续当前流程。
- 页面路由切换、组件卸载或 WebView 退出前,清理仍在等待中的硬件请求。
- 为签名、地址确认等长操作增加超时保护,避免请求长期挂起。
参考片段
用户主动取消
ukeySdk.cancel(connectId);
页面卸载时清理
useEffect(() => {
return () => {
ukeySdk.cancel(connectId);
};
}, [connectId]);
为长操作增加超时保护
async function signWithTimeout(connectId: string, deviceId: string, params: any, timeoutMs = 60_000) {
const timer = setTimeout(() => {
ukeySdk.cancel(connectId);
}, timeoutMs);
try {
const result = await ukeySdk.evmSignTransaction(connectId, deviceId, params);
clearTimeout(timer);
return result;
} catch (error) {
clearTimeout(timer);
throw error;
}
}
输出
cancel(connectId) 本身没有业务返回值:
undefined;
被取消请求的典型返回
如果某个正在执行的请求被 cancel 中断,该请求通常会返回类似下面的错误结构:
{
success: false,
payload: {
error: "User cancelled the action",
code: 801, // ACTION_CANCELLED
},
}
完整错误码可参考 错误码。
cancel 与断开连接的区别
| 项目 | cancel(connectId) | 物理断开(拔线 / BLE 断开) |
|---|---|---|
| 行为 | 中止当前挂起请求,设备仍保持连接 | 传输层断开,挂起请求全部失败 |
| 连接状态 | 仍可继续发起后续 SDK 调用 | 需要重新搜索并连接设备 |
| 适用场景 | 用户取消、超时保护、页面清理 | 硬件拔出、蓝牙超距、系统断链 |
说明
- SDK 不提供单独的编程式“disconnect”方法。
- 如果只是想结束当前请求而不释放物理连接,使用
cancel即可。 - 如果后续不再继续发起调用,让会话自然结束即可;设备断开或页面关闭后,传输层会自动清理。