Реагировать на собственную базу запросов в редукторном редукторе - PullRequest
0 голосов
/ 23 марта 2020

когда в firebase добавляется новое сообщение, я запускаю следующий код

 database()
      .ref('messages/' + user.uid)
      .on(
        'child_changed',
        snapshot => {
          dispatch(_messageChildAdded2(snapshot));
        },
      );

, который запускает следующее создатель действия

const _messageChildAdded2 = snapshot => {
  return {
    type: MESSAGE_CHILD_ADDED_2,
    payload: snapshot,
  };
};

... и вот мой редуктор, где я получаю информацию о пользователе из firebase и пытаюсь добавить данные в reducer

const getUserObj = userId => {
  console.log(userId);
  database()
    .ref('profiles/users/' + userId)
    .once('value')
    .then(snapshot => {
      return snapshot;
    });
};

case MESSAGE_CHILD_ADDED_2:
  const keyAdd = action.payload.key;
  let valAdd = getUserObj(keyAdd)
    return { ...state, myMsgFriends: { ...state.myMsgFriends, [keyAdd]: valAdd } };

Проблема заключается в том, что запрос firebase имеет асин c, поэтому редуктор обновляется значением valAdd, которое не определено. Должен ли я пытаться сделать синхронный вызов Firebase? Если да, то как? Если нет, что я должен делать, чтобы сделать эту работу?

Спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...