Redux отправка Thunk от другого Thunk, отправка с последнего Thunk не происходит - PullRequest
0 голосов
/ 17 января 2019

Так что после рефакторинга этот код

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, он, кажется, будет вызван и никаких проблем.

И без этого рефактора нет проблем.

...