Skip to Content
硬件接入基础 API取消请求

取消请求

概述

取消当前正在执行的 SDK 方法调用,并触发 ui-close_window 事件。用于中止长时间等待的操作(例如等待用户在设备上确认)或关闭待处理的 UI 提示(PIN / Passphrase 对话框)。

重要: cancel() 仅中止正在进行的 SDK 调用 — 它不会断开传输连接(USB 或 BLE)。设备连接保持活跃,取消后可立即发起新的调用。

方法

HardwareSDK.cancel(connectId?: string): void;

参数

参数类型是否必填描述
connectIdstring目标设备的 connectId。不传时,SDK 会取消当前正在使用的设备上的活动调用。

返回值

undefined — 方法立即返回。挂起的 SDK 调用将以错误拒绝(错误码 801,“User cancelled the action”)。

使用场景

场景示例
用户在 PIN / Passphrase 对话框中点击”取消”中止挂起的 uiResponse 等待
超时 — 设备确认等待过久在自定义计时器触发后取消
页面导航 — 用户离开页面或关闭弹窗在组件卸载前清理
重试 — 需要从头重新发起调用先取消,再重新发起调用

示例

基本取消

// 发起一个长时间运行的调用 const signPromise = HardwareSDK.evmSignTransaction(connectId, deviceId, { path: "m/44'/60'/0'/0/0", transaction: { /* ... */ }, }); // 用户点击"取消" HardwareSDK.cancel(connectId); // Promise 会被拒绝 const result = await signPromise; // result.success === false // result.payload.code === 801

组件卸载时取消(React)

import { useEffect, useRef } from 'react'; function SignTransaction({ connectId, deviceId }) { const connectIdRef = useRef(connectId); useEffect(() => { connectIdRef.current = connectId; return () => { // 组件卸载时中止挂起的设备调用 HardwareSDK.cancel(connectIdRef.current); }; }, [connectId]); // ... }

超时取消

async function signWithTimeout(connectId: string, deviceId: string, params: any, timeoutMs = 60_000) { const timer = setTimeout(() => { HardwareSDK.cancel(connectId); }, timeoutMs); try { const result = await HardwareSDK.evmSignTransaction(connectId, deviceId, params); clearTimeout(timer); return result; } catch (err) { clearTimeout(timer); throw err; } }

Cancel 与 Disconnect 的区别

cancel(connectId)物理断开(拔线 / BLE 超出范围)
行为中止挂起的 SDK 调用;设备保持连接传输层触发 DEVICE.DISCONNECT 事件;所有挂起的调用被拒绝
连接状态活跃 — 可立即调用 SDK 方法已断开 — 需要重新发现并连接
使用场景用户主动取消、超时、页面导航清理硬件事件(拔线、BLE 信号丢失)

SDK 不提供编程式的 “disconnect” 方法。传输层的清理在设备物理断开或页面/应用关闭时自动发生。如需释放会话而不断开连接,只需停止发起 SDK 调用 — 会话将在内部超时后自动释放。

错误码参考

调用被取消时,拒绝的结果结构如下:

{ success: false, payload: { error: "User cancelled the action", code: 801 // ACTION_CANCELLED } }

完整错误码列表请参见 错误码

Last updated on