Я создаю приложение для Android с React Native, используя Firebase для реализации чата между пользователями. Сейчас я запускаю тесты и обнаружил, что иногда отправка сообщений чата вызывает следующее исключение и приводит к сбою приложения:

Ошибка Reference.child: первый аргумент был недопустимым путем = "undefined". Пути должны быть непустыми строками и не могут содержать ".", "#", "$", "[" Или "]"

Это функция, которая отправляет сообщения в базу данных Firebase Realtime, срабатывает всякий раз, когда нажимается кнопка «отправить сообщение»:

sendMessageToFirebase(chatId, userId){
  let newMessage = {created: new Date().toJSON(), text: this.state.textInput}
  //getting messages data from firebase
  let data = {};
  console.log('REF:' + firebase.database().ref('chats'));
  dataRef = firebase.database().ref('chats').child(chatId);
  console.log('REF WITH CHILD: ' + dataRef);
  dataRef.on('value', datasnap=>{
      data = datasnap.val()
      //the following function rewrites the dictionary fetched from FB to add the new message
      data = this.rewriteFirebaseChatData(data, userId, newMessage);
  })
  //sending the data
  dataRef.set(data)
  this.loadMessagesFromFirebase(chatId);
}

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

0
martincito 27 Фев 2021 в 23:49

1 ответ

Лучший ответ

Если ошибка связана с кодом, которым вы поделились, похоже, что chatId равно undefined.

Вы захотите проверить вызывающий код, почему это происходит. Если это допустимый случай, вы также захотите проверить это в sendMessageToFirebase, например, добавив это в начало метода:

if (!chatId) return;
1
Frank van Puffelen 27 Фев 2021 в 20:57