import { ref } from 'vue'; /** * 通用错误处理钩子 * 用于处理API请求和其他异步操作中的错误 * @returns 包含错误状态和处理方法的对象 */ export function useErrorHandler() { const error = ref(null); const isLoading = ref(false); /** * 重置错误状态 */ function resetError() { error.value = null; } /** * 处理错误并更新状态 * @param err - 捕获到的错误 */ function handleError(err: unknown) { if (err instanceof Error) { error.value = err; } else if (typeof err === 'string') { error.value = new Error(err); } else { error.value = new Error('发生未知错误'); } isLoading.value = false; console.error('错误:', error.value); } /** * 包装异步函数以自动处理错误 * @param asyncFn - 需要执行的异步函数 * @returns 包装后的异步函数 */ async function wrapAsync(asyncFn: () => Promise): Promise { try { isLoading.value = true; resetError(); const result = await asyncFn(); return result; } catch (err) { handleError(err); return null; } finally { isLoading.value = false; } } return { error, isLoading, resetError, handleError, wrapAsync }; }