fix: 优化功能,去掉sync,当useContextKey中如果有promise自己维护Promise

This commit is contained in:
熊潇 2025-03-01 17:31:13 +08:00
parent 950a4cd905
commit 213219518f
2 changed files with 40 additions and 13 deletions

View File

@ -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"
}
}

View File

@ -1,3 +1,5 @@
import { BaseLoad } from '@kevisual/load';
type GlobalContext<U = any> = {
redis?: any;
} & U;
@ -15,28 +17,50 @@ export const useContext = <T = GlobalContext>(initContext?: GlobalContext): T =>
return global.context;
};
/**
* key存在时key对应的值init函数的值
* init不存在key存在key存在await
*
* @param key
* @param init
* @returns
*/
export const useContextKey = <T = any>(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 <T = any>(key: string, init?: () => Promise<T>): Promise<T> => {
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 = <T>(key: string, value: T) => {