38 lines
948 B
TypeScript
38 lines
948 B
TypeScript
import type { ApiResponse } from '@/types/common'
|
|
|
|
export class ApiResponseError extends Error {
|
|
readonly code: number | string
|
|
readonly traceId?: string
|
|
|
|
constructor(response: ApiResponse<unknown>) {
|
|
super(response.message || '接口请求失败')
|
|
this.name = 'ApiResponseError'
|
|
this.code = response.code
|
|
this.traceId = response.traceId
|
|
}
|
|
}
|
|
|
|
export function isSuccessCode(code: number | string) {
|
|
return code === 0 || code === '0'
|
|
}
|
|
|
|
export function unwrapApiResponse<T>(response: ApiResponse<T>): T {
|
|
if (!isSuccessCode(response.code)) {
|
|
throw new ApiResponseError(response)
|
|
}
|
|
|
|
if (response.data === null) {
|
|
throw new Error(response.message || '接口未返回业务数据')
|
|
}
|
|
|
|
return response.data
|
|
}
|
|
|
|
export function unwrapNullableApiResponse<T>(response: ApiResponse<T | null>): T | null {
|
|
if (!isSuccessCode(response.code)) {
|
|
throw new ApiResponseError(response)
|
|
}
|
|
|
|
return response.data
|
|
}
|