task-9: 进度类请求默认 10s 超时(progressTimeoutMs 可配置覆盖,postTaskProgressBatch 接入)
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
type JavaApiResponse,
|
||||
unwrapJavaResponse,
|
||||
} from "@/shared/api/http";
|
||||
import { getTaskProgressCacheTtlMs } from "@/shared/task-progress-config";
|
||||
import { getTaskProgressCacheTtlMs, getTaskProgressTimeoutMs } from "@/shared/task-progress-config";
|
||||
import { createTaskProgressRequestCache } from "@/shared/task-progress-request-cache";
|
||||
|
||||
const JAVA_API_PREFIX = "/newApi/api";
|
||||
@@ -71,7 +71,9 @@ async function postTaskProgressBatch<T>(
|
||||
}
|
||||
|
||||
const requestPromise = unwrapJavaResponse(
|
||||
post<JavaApiResponse<T>, { taskIds: number[] }>(path, { taskIds: normalizedTaskIds }),
|
||||
post<JavaApiResponse<T>, { taskIds: number[] }>(path, { taskIds: normalizedTaskIds }, {
|
||||
timeout: getTaskProgressTimeoutMs(),
|
||||
}),
|
||||
)
|
||||
.then((data) => {
|
||||
taskProgressResponseCache.set(cacheKey, data);
|
||||
|
||||
@@ -19,6 +19,7 @@ export const TASK_PROGRESS_VISIBLE_CACHE_MILLIS = 5000;
|
||||
export const TASK_PROGRESS_HIDDEN_CACHE_MILLIS = 30000;
|
||||
export const TASK_POLL_BACKOFF_BASE_MS = 500;
|
||||
export const TASK_POLL_BACKOFF_MAX_MS = 5000;
|
||||
export const TASK_PROGRESS_TIMEOUT_MS = 10000;
|
||||
|
||||
export interface TaskPollingConfig {
|
||||
/** 退避基数(毫秒),必须为正数 */
|
||||
@@ -29,6 +30,8 @@ export interface TaskPollingConfig {
|
||||
foregroundRefreshEnabled?: boolean;
|
||||
/** 前台恢复延迟(毫秒),默认 0 */
|
||||
foregroundRefreshDelayMs?: number;
|
||||
/** 进度类请求超时(毫秒),默认 10s,必须为正数 */
|
||||
progressTimeoutMs?: number;
|
||||
}
|
||||
|
||||
const DEFAULTS: Required<TaskPollingConfig> = {
|
||||
@@ -36,6 +39,7 @@ const DEFAULTS: Required<TaskPollingConfig> = {
|
||||
backoffMaxMs: TASK_POLL_BACKOFF_MAX_MS,
|
||||
foregroundRefreshEnabled: true,
|
||||
foregroundRefreshDelayMs: 0,
|
||||
progressTimeoutMs: TASK_PROGRESS_TIMEOUT_MS,
|
||||
};
|
||||
|
||||
let config: Required<TaskPollingConfig> = { ...DEFAULTS };
|
||||
@@ -73,6 +77,10 @@ export function getTaskForegroundRefreshDelayMs() {
|
||||
return config.foregroundRefreshDelayMs;
|
||||
}
|
||||
|
||||
export function getTaskProgressTimeoutMs() {
|
||||
return config.progressTimeoutMs;
|
||||
}
|
||||
|
||||
export function configureTaskPolling(partial: TaskPollingConfig) {
|
||||
const next = { ...config, ...partial };
|
||||
if (!(next.backoffBaseMs > 0)) {
|
||||
@@ -84,6 +92,9 @@ export function configureTaskPolling(partial: TaskPollingConfig) {
|
||||
if (!(next.foregroundRefreshDelayMs >= 0)) {
|
||||
throw new Error("恢复延迟不能为负数: " + next.foregroundRefreshDelayMs);
|
||||
}
|
||||
if (!(next.progressTimeoutMs > 0)) {
|
||||
throw new Error("progressTimeoutMs 必须为正数: " + next.progressTimeoutMs);
|
||||
}
|
||||
config = next;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user