feat(error): 新增系统重试提示

This commit is contained in:
肖应宇 2026-04-13 10:40:40 +08:00 committed by Titan
parent 184355d6bf
commit e285e105ef
2 changed files with 31 additions and 1 deletions

View File

@ -4,6 +4,15 @@ import type { Model } from "./types";
export async function loadModels() { export async function loadModels() {
const res = await fetch(`${getBackendBaseURL()}/api/models`); const res = await fetch(`${getBackendBaseURL()}/api/models`);
if (res.status >= 500 && res.status < 600) {
throw new Error(`Server error: ${res.status}`);
}
if (!res.ok) {
throw new Error(`HTTP error: ${res.status}`);
}
const { models } = (await res.json()) as { models: Model[] }; const { models } = (await res.json()) as { models: Model[] };
return models; return models;
} }

View File

@ -1,13 +1,34 @@
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { useEffect } from "react";
import { toast } from "sonner";
import { loadModels } from "./api"; import { loadModels } from "./api";
import type { Model } from "./types";
export function useModels({ enabled = true }: { enabled?: boolean } = {}) { export function useModels({ enabled = true }: { enabled?: boolean } = {}) {
const { data, isLoading, error } = useQuery({ const { data, isLoading, error } = useQuery<Model[], Error>({
queryKey: ["models"], queryKey: ["models"],
queryFn: () => loadModels(), queryFn: () => loadModels(),
enabled, enabled,
refetchOnWindowFocus: false, refetchOnWindowFocus: false,
retry: (failureCount, queryError) => {
if (queryError.message.startsWith("HTTP error: 4")) {
return false;
}
return failureCount < 1;
},
}); });
useEffect(() => {
// React Query v5 removed per-query onError callbacks from useQuery options.
if (error?.message.includes("Server error: 5")) {
toast.error("系统正在更新-5请稍候……");
}
if (error?.message.includes("HTTP error: 4")) {
toast.error("模型接口不可用,请检查后端路由或服务状态。");
}
}, [error]);
return { models: data ?? [], isLoading, error }; return { models: data ?? [], isLoading, error };
} }