Необработанный отказ (TypeError): невозможно прочитать свойство 'id' из неопределенного - PullRequest
0 голосов
/ 26 февраля 2019

В настоящее время я испытываю необработанную ошибку отклонения в моем проекте «Реакция / редукция», и меня немного смущает, почему это происходит.Я искал ответы сейчас часами, но безуспешно.Это работало успешно, прежде чем я попытался добавить в firebase (ref.push).Я могу опубликовать код рабочей версии, если это необходимо.Первоначально я просто использовал db.json.Любая помощь будет оценена.Я чувствую себя совершенно не в своей тарелке, но знаю, что это будет что-то явно очевидное для более опытных людей.

создать потоковое действие (ошибка в строке 2)

  export const createStream = (formValues) => {
  return async (dispatch, getState) => {
    const { userId } = getState().auth;
    const response = await ref.push({ ...formValues, userId });
    console.log(response.data);
    dispatch({ type: CREATE_STREAM, payload: response.data});

    //Navigation to get user back to streams list
    history.push('/');
  };
};

редукторы

export default (state = {}, action) => {
    switch (action.type){
      case FETCH_STREAMS:
        return {...state, ..._.mapKeys(action.payload, 'id')};
      case FETCH_STREAM:
        return {...state, [action.payload.id]: action.payload};
      case CREATE_STREAM:
        return {...state, [action.payload.id]: action.payload};
      case EDIT_STREAM:
        return {...state, [action.payload.id]: action.payload};
      /* case DELETE_STREAM:
        return _.omit(state, action.payload); */
      default: 
        return state;
    }
  }

стек

eval
webpack-internal:///./src/reducers/streamReducer.js:24:326
combination
node_modules/babel-loader/lib/index.js??ref--6-oneOf-2!/Users/seth/projects/twitchclone/client/node_modules/redux/es/redux.js:454
p
<anonymous>:1:36402
v
<anonymous>:1:36684
(anonymous function)
<anonymous>:1:40069
dispatch
node_modules/babel-loader/lib/index.js??ref--6-oneOf-2!/Users/seth/projects/twitchclone/client/node_modules/redux/es/redux.js:213
e
<anonymous>:1:40553
eval
node_modules/babel-loader/lib/index.js??ref--6-oneOf-2!/Users/seth/projects/twitchclone/client/node_modules/redux-thunk/es/index.js:12
dispatch
node_modules/babel-loader/lib/index.js??ref--6-oneOf-2!/Users/seth/projects/twitchclone/client/node_modules/redux/es/redux.js:621

1 Ответ

0 голосов
/ 27 февраля 2019

В вашем создателе действий вы, похоже, предполагаете, что обещание, возвращаемое ref.push(), преобразуется в заданное значение.Однако официальная документация API не поддерживает эту теорию.Он просто говорит:

Возвращает : ненулевое firebase.database.ThenableReference.Совместное обещание и справка;разрешается, когда запись завершена, но может быть немедленно использована в качестве ссылки на дочернее местоположение.

Итак, очевидно, обещание просто для ожидания завершения операции и не дает значения(т. е. всегда выдает undefined).

Поскольку вы знаете, что значение должно возвращаться уже до его сохранения в Firebase, вы можете реструктурировать свой код так, чтобы он возвращался напрямую.

// Store stream before passing it to ref.push()
const stream = { ...formValues, userId };
await ref.push(stream);

// Pass the stream as action payload
dispatch({ type: CREATE_STREAM, payload: stream });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...