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

@ -1,10 +1,10 @@
import _isFunction from 'lodash/isFunction'; import _isFunction from 'lodash/isFunction';
import _isEqual from 'lodash/isEqual'; import _isEqual from 'lodash/isEqual';
/** /**
* get set * get set
* *
*/ */
export function buildRegFn<F extends (...args: any[]) => any>( export function buildRegFn<F extends (...args: any[]) => any>(
name: string, name: string,
defaultFunc?: F defaultFunc?: F
@ -29,6 +29,27 @@ export function buildRegFn<F extends (...args: any[]) => any>(
return [get, set] as const; 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 * buildRegFn
*/ */

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

Loading…
Cancel
Save