에러
bridge.request(...)는 실패하면 reject됩니다. 모든 에러는 BridgeError를 상속하므로 instanceof로 분기할 수 있습니다.
ts
import {
BridgeError,
BridgeTimeoutError,
BridgeValidationError,
BridgeUnknownMessageError,
BridgeHandlerError,
BridgeDisposedError,
} from 'webview-bridge-kit';
try {
const { token } = await bridge.request('GET_FCM_TOKEN');
} catch (e) {
if (e instanceof BridgeTimeoutError) {
// 타임아웃
} else if (e instanceof BridgeValidationError) {
// 스키마 검증 실패
}
}에러 종류
| 에러 | 발생 시점 |
|---|---|
BridgeTimeoutError | request가 타임아웃 안에 응답을 못 받음 |
BridgeValidationError | 보낸 payload / 받은 response가 스키마 검증에 실패 (send/emit도 throw) |
BridgeUnknownMessageError | contract에 없는 request 호출, 또는 native가 handler를 못 찾아 거절한 경우 |
BridgeHandlerError | native의 request handler가 예외를 던진 경우 (code, detail 포함) |
BridgeDisposedError | dispose 이후 호출, 또는 dispose 시 정리되는 pending request |
BridgeError | 위 모든 에러의 베이스 클래스 |
request가 아닌 경우
bridge.send()(command) ·bridge.emit()(event) — payload 스키마 검증에 실패하면BridgeValidationError를 throw합니다(비동기 아님). contract에 없는 이름이면 throw하지 않고logger.warn후 drop합니다.- 들어오는 메시지 — 깨진 JSON, 지원하지 않는 protocol version, contract에 없는 event/command, 검증 실패한 event/command payload는 모두
logger.warn(또는error) 후 조용히 drop됩니다. 이때logger를 설정해 두면 디버깅에 도움이 됩니다.
직접 호출한 request의 실패는 logger가 아니라 try/catch로 처리하세요.