redux и redux-saga: Reducer возвращает обещание вместо обычного объекта - PullRequest
0 голосов
/ 06 августа 2020

Как и сказано в заголовке, мой редуктор возвращает обещание вместо обычного объекта. Я предполагаю, что это потому, что я использую redux-saga для asyn c запросов, что вроде бы не имеет смысла. Есть ли способ, чтобы мой редуктор вместо этого возвращал разрешенный объект?

// reducer.tsx
...
const initialState = {
  token: '',
  error: null,
  loading: false
};

const authenticationReducer = async (state = initialState, action) => {
  switch (action.type) {
    case EMAIL_LOGIN: {
      console.log('action.payload: ', action.payload);
      const {token} = action.payload;

      return {
        ...state,
        token
      };
    }

...
// saga.tsx

function* emailLogin({type, payload}) {
  try {
    const {email, password} = payload;

    const loginUserInfo = {
      email,
      password,
    };

    const response = yield call(axios, `${USER_ADDRESS}/login/`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: loginUserInfo,
    });

    yield put(setLoginStatus(response));
  } catch (e) {}
}

Но по какой-то причине оба useSelector() и useStore() указывают на то, что мой редуктор возвращает обещание

//  Login.tsx

...
const token = useSelector(state =>{ console.log(state)}) // {authentication: Promise}
const state = useStore().getState();
console.log(state)   // {authenitcation: Promise}
...

Пожалуйста, помогите!

1 Ответ

2 голосов
/ 06 августа 2020

async функции всегда возвращают обещание. Редукторы никогда не должны быть асинхронными c!

В этом случае все, что вам нужно сделать, это удалить ключевое слово async из редуктора.

...