From 820a0d8ec9ee8233195cb9f9c1dcbc945392ac07 Mon Sep 17 00:00:00 2001 From: lvboda Date: Fri, 24 Oct 2025 14:17:19 +0800 Subject: [PATCH 1/2] fix(useRequest): return immediately in runAsync when ready=false (no pending) --- packages/hooks/src/useRequest/src/Fetch.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hooks/src/useRequest/src/Fetch.ts b/packages/hooks/src/useRequest/src/Fetch.ts index 2c71823b2b..6b7cac0fa1 100644 --- a/packages/hooks/src/useRequest/src/Fetch.ts +++ b/packages/hooks/src/useRequest/src/Fetch.ts @@ -54,7 +54,7 @@ export default class Fetch { // stop request if (stopNow) { - return new Promise(() => {}); + return Promise.resolve(state.data); } this.setState({ From e443b02e8f51f6fea2faad7abac2582935f48965 Mon Sep 17 00:00:00 2001 From: lvboda Date: Fri, 24 Oct 2025 14:54:31 +0800 Subject: [PATCH 2/2] test(useRequest): ensure runAsync resolves immediately when ready=false --- .../src/useRequest/__tests__/index.spec.ts | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/packages/hooks/src/useRequest/__tests__/index.spec.ts b/packages/hooks/src/useRequest/__tests__/index.spec.ts index 998da687a2..c6f6adfd3e 100644 --- a/packages/hooks/src/useRequest/__tests__/index.spec.ts +++ b/packages/hooks/src/useRequest/__tests__/index.spec.ts @@ -193,6 +193,61 @@ describe('useRequest', () => { hook.unmount(); }); + test('runAsync should resolve immediately when ready=false', async () => { + // manual = true + act(() => { + hook = setUp(request, { + manual: true, + ready: false, + }); + }); + expect(hook.result.current.loading).toBe(false); + + let resolved = false; + let value: any = 'init'; + + await act(async () => { + hook.result.current + .runAsync(1) + .then((res: any) => { + resolved = true; + value = res; + }); + await Promise.resolve(); + }); + + expect(resolved).toBe(true); + expect(value).toBeUndefined(); + expect(hook.result.current.loading).toBe(false); + hook.unmount(); + + // manual = false + act(() => { + hook = setUp(request, { + ready: false, + }); + }); + expect(hook.result.current.loading).toBe(false); + + resolved = false; + value = 'init'; + + await act(async () => { + hook.result.current + .runAsync(1) + .then((res: any) => { + resolved = true; + value = res; + }); + await Promise.resolve(); + }); + + expect(resolved).toBe(true); + expect(value).toBeUndefined(); + expect(hook.result.current.loading).toBe(false); + hook.unmount(); + }); + test('useRequest defaultParams should work', async () => { act(() => { hook = setUp(request, {