Skip to content

错误处理

错误对象结构

所有 woo.* 调用失败时,Promise 会 reject 一个错误对象:

ts
interface BridgeError {
  code: number     // 错误码(见下表)
  message: string  // 错误描述
}

基础用法

ts
import { BridgeErrorCode } from 'mini-sdk'

try {
  await woo.chooseImage({ count: 1 })
} catch (err: any) {
  switch (err.code) {
    case BridgeErrorCode.UserCancelled:
      // 用户关闭了文件选择框,不需要提示
      break
    case BridgeErrorCode.PermissionDenied:
      woo.showToast({ title: '请在系统设置中允许访问相册', icon: 'error' })
      break
    case BridgeErrorCode.Timeout:
      woo.showToast({ title: '请求超时,请重试', icon: 'error' })
      break
    default:
      console.error('未知错误', err.code, err.message)
  }
}

错误码速查

枚举说明
UnhandledApi10001API 未注册
Timeout40800请求超时
PermissionDenied20001权限被拒绝
AuthFailed20002鉴权失败
BiometricCancelled20003生物识别取消
InvalidParam40001参数错误
NotSupported40002功能不支持
UserCancelled40003用户取消操作
NetworkUnavailable40004网络不可用
InternalError50000Native 内部错误

全局错误处理

推荐在应用入口统一捕获未处理的 Bridge 错误:

ts
// main.ts
import { BridgeErrorCode } from 'mini-sdk'

// Vue 错误边界
app.config.errorHandler = (err: any) => {
  if (err?.code === BridgeErrorCode.NetworkUnavailable) {
    woo.showToast({ title: '网络不可用', icon: 'error' })
    return
  }
  if (err?.code === BridgeErrorCode.UserCancelled) {
    // 用户取消不需要上报
    return
  }
  // 上报到错误监控
  woo.recordEvent({ event: 'bridge_error', properties: { code: err.code, message: err.message } })
}

最佳实践

忽略用户取消

UserCancelled(40003)是正常用户行为,不需要显示错误提示,也不需要上报。

超时处理

网络请求默认超时 30 秒,文件选择类 API 默认 120 秒。超时后 SDK 会 reject BridgeErrorCode.Timeout,建议在业务层做重试逻辑。

权限拒绝

PermissionDenied(20001)通常是用户拒绝了系统权限弹窗。需要引导用户前往系统设置手动开启,无法通过代码再次获取。

基于 OpenSumi IDE 构建