import { isCancelError } from '@/lib/services/core'; import { toast } from 'sonner'; /** * 错误处理选项 */ interface HandleContextErrorOptions { /** 是否显示 toast 提示 */ showToast?: boolean; /** 是否在控制台记录错误 */ logError?: boolean; } /** * 统一处理 Context 中的错误 * * @param error - 捕获的错误对象 * @param defaultMessage - 默认错误消息 * @param options - 错误处理选项 * @returns 标准化的 Error 对象 * * @example * ```typescript * try { * await fetchData() * } catch (error) { * const errorObject = handleContextError(error, '加载数据失败', { * showToast: true, * logError: true * }) * setError(errorObject) * } * ``` */ export function handleContextError( error: unknown, defaultMessage: string, options: HandleContextErrorOptions = {}, ): Error { const { showToast = false, logError = true } = options; // 取消的请求不算错误 if (isCancelError(error)) { return new Error('请求已取消'); } const errorMessage = error instanceof Error ? error.message : defaultMessage; const errorObject = error instanceof Error ? error : new Error(defaultMessage); if (logError) { console.error(defaultMessage, error); } if (showToast) { toast.error(defaultMessage, { description: errorMessage, }); } return errorObject; }