diff --git a/packages/antd/src/__builtins__/loading.ts b/packages/antd/src/__builtins__/loading.ts index d863a826721..b3a98f37250 100644 --- a/packages/antd/src/__builtins__/loading.ts +++ b/packages/antd/src/__builtins__/loading.ts @@ -8,8 +8,10 @@ export const loading = async ( let loading = setTimeout(() => { hide = message.loading(title) }, 100) - const results = await processor() - hide?.() - clearTimeout(loading) - return results + try { + return await processor() + } finally { + hide?.() + clearTimeout(loading) + } } diff --git a/packages/element/src/__builtins__/shared/loading.ts b/packages/element/src/__builtins__/shared/loading.ts index d5c88f65a3f..af33cf2187d 100644 --- a/packages/element/src/__builtins__/shared/loading.ts +++ b/packages/element/src/__builtins__/shared/loading.ts @@ -11,8 +11,10 @@ export const loading = async ( background: 'transparent', }) }, 100) - const results = await processor() - loadingInstance?.close() - clearTimeout(loading) - return results + try { + return await processor() + } finally { + loadingInstance?.close() + clearTimeout(loading) + } } diff --git a/packages/next/src/__builtins__/loading.ts b/packages/next/src/__builtins__/loading.ts index 7163f3233ba..f580c4692f5 100644 --- a/packages/next/src/__builtins__/loading.ts +++ b/packages/next/src/__builtins__/loading.ts @@ -7,8 +7,10 @@ export const loading = async ( let loading = setTimeout(() => { Message.loading(title as any) }, 100) - const results = await processor() - Message.hide() - clearTimeout(loading) - return results + try { + return await processor() + } finally { + Message.hide() + clearTimeout(loading) + } } diff --git a/packages/shared/src/__tests__/index.spec.ts b/packages/shared/src/__tests__/index.spec.ts index fb436b6eab0..efbf3bf7bf2 100644 --- a/packages/shared/src/__tests__/index.spec.ts +++ b/packages/shared/src/__tests__/index.spec.ts @@ -724,3 +724,15 @@ test('applyMiddleware', async () => { await sleep(16) expect(resolved).toBeCalledTimes(0) }) + +test('applyMiddleware with error', async () => { + try { + await applyMiddleware(0, [ + () => { + throw 'this is error' + }, + ]) + } catch (e) { + expect(e).toEqual('this is error') + } +}) diff --git a/packages/shared/src/middleware.ts b/packages/shared/src/middleware.ts index 44d1cc68b23..54ff336cbda 100644 --- a/packages/shared/src/middleware.ts +++ b/packages/shared/src/middleware.ts @@ -3,7 +3,7 @@ export interface IMiddleware { } export const applyMiddleware = (payload: any, fns: IMiddleware[] = []) => { - const compose = (payload: any, fns: IMiddleware[]) => { + const compose = (payload: any, fns: IMiddleware[]): Promise => { const prevPayload = payload return Promise.resolve( fns[0](payload, (payload) => @@ -11,12 +11,12 @@ export const applyMiddleware = (payload: any, fns: IMiddleware[] = []) => { ) ) } - return new Promise((resolve) => { + return new Promise((resolve, reject) => { compose( payload, fns.concat((payload) => { resolve(payload) }) - ) + ).catch(reject) }) }