



























@@ -65,6 +65,26 @@ function okResponse(body = "ok"): Response {
6565return new Response(body, { status: 200 });
6666}
676768+async function raceWithTimeoutResult<T>(
69+promise: Promise<T>,
70+timeoutMs: number,
71+timeoutResult: T,
72+): Promise<T> {
73+let timer: ReturnType<typeof setTimeout> | undefined;
74+try {
75+return await Promise.race([
76+promise,
77+new Promise<T>((resolve) => {
78+timer = setTimeout(() => resolve(timeoutResult), timeoutMs);
79+}),
80+]);
81+} finally {
82+if (timer) {
83+clearTimeout(timer);
84+}
85+}
86+}
87+6888function getDispatcherClassName(value: unknown): string | null {
6989if (!value || typeof value !== "object") {
7090return null;
@@ -1201,13 +1221,14 @@ describe("fetchWithSsrFGuard hardening", () => {
12011221timeoutMs: 1,
12021222});
120312231204-const outcome = await Promise.race([
1224+const outcome = await raceWithTimeoutResult(
12051225fetchPromise.then(
12061226() => "resolved",
12071227(error: unknown) => (error instanceof Error ? error.name : "rejected"),
12081228),
1209-new Promise<string>((resolve) => setTimeout(() => resolve("hung"), 250)),
1210-]);
1229+250,
1230+"hung",
1231+);
1211123212121233expect(outcome).toBe("TimeoutError");
12131234});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。