Auf dieser Seite
Anfrage abbrechen
Übersicht
cancel(connectId) bricht wartende und aktive SDK-Anfragen für diese Verbindung ab und schließt ausstehende SDK-Dialoge. Ohne connectId werden alle ausstehenden Anfragen abgebrochen. Verwenden Sie dies, wenn der Nutzer einen PIN-/Passphrase-Dialog abbricht, den Ablauf verlässt oder eine Anwendungszeitüberschreitung erreicht wird.
Methode
HardwareSDK.cancel(connectId);
// Cancel all pending requests:
HardwareSDK.cancel();Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
connectId | string | Nein | Zielverbindung; weglassen, um alle ausstehenden Anfragen abzubrechen. |
Rückgabewert
cancel() gibt zurück: void. Warten Sie auf das Promise der ursprünglichen Methode, um ihr Ergebnis zu erhalten. Das öffentliche SDK löst eine abgebrochene Anfrage normalerweise auf mit success: false; der Warteschlangenabbruch verwendet HardwareErrorCode.CallQueueActionCancelled (822). Eine geräteseitige Ablehnung oder ein Fehler, der dem Abbruch zuvorkommt, kann einen anderen Code zurückgeben. Vergleichen Sie keine Fehlermeldungstexte und nehmen Sie nicht an, dass jeder Abbruch denselben Code hat.
Beispiele
Einfacher Abbruch
import type { EVMSignTransactionParams } from '@onekeyfe/hd-core';
import { HardwareErrorCode } from '@onekeyfe/hd-shared';
// Use a fully prepared transaction from your application's transaction builder.
declare const params: EVMSignTransactionParams;
const signPromise = HardwareSDK.evmSignTransaction(connectId, deviceId, params);
// Invoke from the user's Cancel action.
HardwareSDK.cancel(connectId);
const result = await signPromise;
if (!result.success) {
if (result.payload.code === HardwareErrorCode.CallQueueActionCancelled) {
// Close the cancelled operation's UI.
} else {
throw new Error(result.payload.error);
}
}Abbruch bei Zeitüberschreitung
Dieser Timer bricht alle ausstehenden Anfragen auf der ausgewählten Verbindung ab; führen Sie Vorgänge daher pro Gerät nacheinander aus.
import type { EVMSignTransactionParams } from '@onekeyfe/hd-core';
async function signWithTimeout(
connectId: string,
deviceId: string,
params: EVMSignTransactionParams,
timeoutMs = 60_000,
) {
const timer = setTimeout(() => HardwareSDK.cancel(connectId), timeoutMs);
try {
return await HardwareSDK.evmSignTransaction(connectId, deviceId, params);
} finally {
clearTimeout(timer);
}
}Abbruch und Beenden des Transports
Ein Abbruch unterbricht den Vorgang und kann eine Bereinigung von Gerät/Verbindung auslösen. Er garantiert nicht, dass die Verbindung nutzbar bleibt oder sofort ein neuer Aufruf starten kann. Warten Sie das ursprüngliche Ergebnis ab; erkennen Sie das Gerät bei Verbindungsverlust erneut und aktualisieren Sie getDeviceState vor einer neuen Nutzeraktion. Wiederholen Sie Signier- oder Firmware-Update-Vorgänge nicht automatisch.
Verwenden Sie HardwareSDK.dispose() beim Beenden des SDKs oder beim Transportwechsel, dann init() vor weiterer Verwendung. Eine physische Trennung wird gemeldet über DEVICE.DISCONNECT; ausstehende öffentliche Methodenaufrufe geben Fehlerergebnisse zurück.
Siehe Verbindungsabbrüche und Wiederverbindung und Fehlercodes.