diff --git a/package.json b/package.json index a958330..978339d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kevisual/use-config", - "version": "1.0.8", + "version": "1.0.9", "types": "dist/config.d.ts", "scripts": { "build": "npm run clean && rollup -c", @@ -57,5 +57,8 @@ "import": "./dist/file-store.mjs", "types": "./dist/file-store.d.ts" } + }, + "dependencies": { + "@kevisual/load": "^0.0.4" } } \ No newline at end of file diff --git a/src/context.ts b/src/context.ts index 1998501..7cb0f73 100644 --- a/src/context.ts +++ b/src/context.ts @@ -1,3 +1,5 @@ +import { BaseLoad } from '@kevisual/load'; + type GlobalContext = { redis?: any; } & U; @@ -15,28 +17,50 @@ export const useContext = (initContext?: GlobalContext): T => return global.context; }; +/** + * 获取上下文,当key存在时,返回key对应的值,不存在时,返回init函数的值 + * 若init不存在,key存在,直接进行循环检测,直到key存在,需要await + * + * @param key + * @param init + * @returns + */ export const useContextKey = (key: string, init?: () => T): T => { const _context = useContext({}); if (key && typeof _context[key] !== 'undefined') { return _context[key]; } if (key && init) { + // 没有初始化过,初始化函数 _context[key] = (init as () => T)(); return _context[key] as any; } - return _context as any; -}; - -export const useContextKeySync = async (key: string, init?: () => Promise): Promise => { - const _context = useContext({}); - if (key && typeof _context[key] !== 'undefined') { - return _context[key]; + // 其他情况,默认已经初始化过 + if (key) { + // 加载 + const baseLoad = new BaseLoad(); + const voidFn = async () => { + return _context[key]; + }; + const checkFn = async () => { + const loadRes = await baseLoad.load(voidFn, { + key, + isReRun: true, + checkSuccess: () => _context[key], + timeout: 5 * 60 * 1000, + interval: 1000, + // + }); + if (loadRes.code !== 200) { + console.error('load key error'); + return null; + } + return _context[key]; + }; + return checkFn() as any; } - if (key && init) { - _context[key] = await init(); - return _context[key] as any; - } - return _context as any; + console.error('key is empty'); + return null; }; export const setContextKey = (key: string, value: T) => {