Firebase Web: метод не запускается в первый раз внутри child_added - PullRequest
0 голосов
/ 24 июня 2019

В моем проекте есть функция чата. Когда кто-то отправляет сообщение, я обновляю базу данных с помощью push.

И я определяю метод с именем renderChatUI.

Я определяю слушателя так:

firebase.database().ref(`USERS/${Database.getNestedData('UID')}/UserClass/${grade}/${subject}/Topics/${key}/Chats`).on('child_added', (snapshot) => {
  console.log('Hello');
  this.renderChatUI(UID, grade, subject, key);
})

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

Блок кода child_added выполняется отлично, но метод renderChatUI () не запускается в первый раз (когда я добавляю первое сообщение). При добавлении второго сообщения пользовательский интерфейс чата перерисовывается с первым сообщением, при добавлении третьего пользовательского интерфейса чата перерисовывается со вторым и так далее ...!

Я не могу понять, что происходит не так. Я ценю вашу помощь.

1 Ответ

2 голосов
/ 24 июня 2019

Чтобы разрешить запуск child-added после добавления в базу данных, вы можете использовать обратный вызов завершения, например:

 firebase.database().ref('users/' + userId).set({
    username: name,
    email: email,
    profile_picture : imageUrl
  }, function(error) {
    if (error) {
      // The write failed...
    } else {
      // Data saved successfully!
      firebase.database().ref(`USERS/${Database.getNestedData('UID')}/UserClass/${grade}/${subject}/Topics/${key}/Chats`).on('child_added', (snapshot) => {
         console.log('Hello');
         this.renderChatUI(UID, grade, subject, key);
       })
    }
  });
}

Из документов :

Необязательный обратный вызов завершения, который вызывается, когда запись была зафиксирована в базе данных. Если вызов был неудачным, обратному вызову передается объект ошибки, указывающий причину сбоя.

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