12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import { ref } from 'vue';
-
- /**
- * 通用错误处理钩子
- * 用于处理API请求和其他异步操作中的错误
- * @returns 包含错误状态和处理方法的对象
- */
- export function useErrorHandler() {
- const error = ref<Error | null>(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<T>(asyncFn: () => Promise<T>): Promise<T | null> {
- 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
- };
- }
|