fix(webui): prevent redundant thread and media reloads (#5164)

This commit is contained in:
chengyongru
2026-07-30 10:25:22 +08:00
committed by GitHub
parent fc73d5ff39
commit 11fcd9cc5f
29 changed files with 1465 additions and 247 deletions
+20 -10
View File
@@ -12,22 +12,32 @@ export async function fetchWithTimeout(
const controller = typeof AbortController !== "undefined"
? new AbortController()
: null;
const externalSignal = init.signal;
const abortFromExternal = () => controller?.abort();
let timeoutId: ReturnType<typeof setTimeout> | undefined;
const request = fetch(input, {
...init,
signal: controller?.signal ?? init.signal,
});
const timeout = new Promise<Response>((_, reject) => {
timeoutId = setTimeout(() => {
reject(new Error(`Request timed out after ${timeoutMs}ms`));
controller?.abort();
}, timeoutMs);
});
if (controller && externalSignal) {
if (externalSignal.aborted) {
controller.abort();
} else {
externalSignal.addEventListener("abort", abortFromExternal, { once: true });
}
}
try {
const request = fetch(input, {
...init,
signal: controller?.signal ?? externalSignal,
});
const timeout = new Promise<Response>((_, reject) => {
timeoutId = setTimeout(() => {
reject(new Error(`Request timed out after ${timeoutMs}ms`));
controller?.abort();
}, timeoutMs);
});
return await Promise.race([request, timeout]);
} finally {
if (timeoutId !== undefined) clearTimeout(timeoutId);
externalSignal?.removeEventListener("abort", abortFromExternal);
}
}