refactor: 增加带事件监听的 buildRegFnWithEvent

用于处理在get过后再set的时序问题
pull/13/head
moonrailgun 4 years ago
parent 6fddae2133
commit 3556d28832

@ -4,7 +4,7 @@ import _isString from 'lodash/isString';
import _isNil from 'lodash/isNil';
import _isFunction from 'lodash/isFunction';
import { getErrorHook, tokenGetter } from '../manager/request';
import { getServiceUrl } from '../manager/service';
import { getServiceUrl, onServiceUrlChange } from '../manager/service';
export type CommonRequestResult<T> =
| ({
@ -24,6 +24,10 @@ export function createRequest() {
const ins = axios.create({
baseURL: getServiceUrl(),
});
onServiceUrlChange((getUrl) => {
// 重置请求地址
ins.defaults.baseURL = getUrl();
});
ins.interceptors.request.use(async (val) => {
if (

@ -1,10 +1,10 @@
import _isFunction from 'lodash/isFunction';
import _isEqual from 'lodash/isEqual';
/**
* get set
*
*/
export function buildRegFn<F extends (...args: any[]) => any>(
name: string,
defaultFunc?: F
@ -29,6 +29,27 @@ export function buildRegFn<F extends (...args: any[]) => any>(
return [get, set] as const;
}
/**
* get set
*/
export function buildRegFnWithEvent<F extends (...args: any[]) => any>(
name: string,
defaultFunc?: F
) {
const [get, _set] = buildRegFn(name, defaultFunc);
const listenerList: ((v: F) => void)[] = [];
const onSet = (cb: (v: F) => void): void => {
listenerList.push(cb);
};
const set = (fn: F): void => {
_set(fn);
listenerList.forEach((listener) => listener(fn));
};
return [get, set, onSet] as const;
}
/**
* buildRegFn
*/

@ -1,9 +1,10 @@
import { buildRegFn } from './buildRegFn';
import { buildRegFnWithEvent } from './buildRegFn';
/**
*
*/
export const [getServiceUrl, setServiceUrl] = buildRegFn<() => string>(
'serverUrl',
() => 'http://127.0.0.1:11000'
);
export const [getServiceUrl, setServiceUrl, onServiceUrlChange] =
buildRegFnWithEvent<() => string>(
'serverUrl',
() => 'http://127.0.0.1:11000'
);

Loading…
Cancel
Save