From 2a79acc59aca9c551935d06c52c98d04b46104cd Mon Sep 17 00:00:00 2001 From: pany <939630029@qq.com> Date: Sun, 21 May 2023 16:02:02 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96=20?= =?UTF-8?q?hooks/useFullscreenLoading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useFullscreenLoading.ts | 46 ++++++------------------------- 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/src/hooks/useFullscreenLoading.ts b/src/hooks/useFullscreenLoading.ts index ad0e378..57defd8 100644 --- a/src/hooks/useFullscreenLoading.ts +++ b/src/hooks/useFullscreenLoading.ts @@ -12,52 +12,24 @@ interface LoadingInstance { interface UseFullscreenLoading { ReturnType>(fn: T, options?: LoadingOptions): ( ...args: Parameters - ) => Promise> | ReturnType + ) => Promise> } /** - * 传入一个函数 fn,在它执行周期内,加上「全屏」loading, - * 如果: - * 1. fn 如果是同步函数,执行结束后隐藏 loading - * 2. fn 如果是 Promise,resolve 或 reject 后隐藏 loading - * 3. 报错后隐藏 loading 并抛出错误 - * @param {*} fn 要执行的函数 + * 传入一个函数 fn,在它执行周期内,加上「全屏」loading + * @param fn 要执行的函数 * @param options LoadingOptions - * @returns Function 一个新的函数,去执行它吧 + * @returns 返回一个新的函数,该函数返回一个 Promise */ export const useFullscreenLoading: UseFullscreenLoading = (fn, options = {}) => { let loadingInstance: LoadingInstance - const showLoading = (options: LoadingOptions) => { - loadingInstance = ElLoading.service(options) - } - const hideLoading = () => { - loadingInstance && loadingInstance.close() - } - const _options = { ...defaultOptions, ...options } - return (...args) => { + return async (...args) => { try { - showLoading(_options) - const result = fn(...args) - const isPromise = result instanceof Promise - // 同步函数 - if (!isPromise) { - hideLoading() - return Promise.resolve(result) - } - // Promise + loadingInstance = ElLoading.service({ ...defaultOptions, ...options }) + const result = await fn(...args) return result - .then((res) => { - return res - }) - .catch((err) => { - throw err - }) - .finally(() => { - hideLoading() - }) - } catch (err) { - hideLoading() - throw err + } finally { + loadingInstance?.close() } } }