Так что после рефакторинга этот код
export const login: ({ userName: string, password: string }) => TThunkAction =
({ userName, password }) => async (dispatch, getState) => {
const SIGN_IN_URL = '/signin';
const res: $AxiosXHR<{username: string, password: string}, TLoginResData> =
await api1.post(SIGN_IN_URL, { username: userName, password })
.catch((err) => {
throw new SubmissionError({ _error: err.response.data.message });
});
const data: TLoginResData = res.data;
if (data && data.token && data.result) {
const state = { token: data.token, profile: data.result };
dispatch(onLogin(state));
setAuthToken(data.token, api1);
const res: $AxiosXHR<void, TPermissionResData> =
await api1.get('/permissions')
.catch(throwBadResult);
const permissions: TPermissions =
[...res.data.result, ...localPermissions];
dispatch(onPermissionsGet(permissions));
dispatch(push('/dashboard'));
localStorage.setItem('auth', state.token);
} else {
throwBadResult();
}
};
к этому
const getPermissions: () => TThunkAction =
() => async (getState, dispatch) => {
console.log('getPermissions');
const res: $AxiosXHR<void, TPermissionResData> =
await api1.get('/permissions')
.catch(throwBadResult);
const permissions: TPermissions =
[...res.data.result, ...localPermissions];
dispatch(onPermissionsGet(permissions));
};
export const login: ({ userName: string, password: string }) => TThunkAction =
({ userName, password }) => async (dispatch, getState) => {
const SIGN_IN_URL = '/signin';
const res: $AxiosXHR<{username: string, password: string}, TLoginResData> =
await api1.post(SIGN_IN_URL, { username: userName, password })
.catch((err) => {
throw new SubmissionError({ _error: err.response.data.message });
});
const data: TLoginResData = res.data;
if (data && data.token && data.result) {
const state = { token: data.token, profile: data.result };
dispatch(onLogin(state));
setAuthToken(data.token, api1);
await dispatch(getPermissions());
dispatch(push('/dashboard'));
localStorage.setItem('auth', state.token);
} else {
throwBadResult();
}
};
Странная вещь случается.
getPermissions
называется.
Получает ответ успешно.
отправка onPermissionsGet
.
export const onPermissionsGet = (payload: TPermissions) => ({
type: ON_PERMISSIONS_GET,
payload,
});
И ... ничего не происходит.
В devtools я не вижу ON_PERMISSIONS_GET
.
И все же, если я введу console.log
в onPermissionsGet
, он, кажется, будет вызван и никаких проблем.
И без этого рефактора нет проблем.