跳到主要内容

取消请求

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 即可。
  • 如果后续不再继续发起调用,让会话自然结束即可;设备断开或页面关闭后,传输层会自动清理。