Заполнение массива из функции циклического воспроизведения Firebase - PullRequest
0 голосов
/ 26 марта 2020

У меня есть рабочий интерфейс приложения чата, использующий только ReactNative и Firebase. Сейчас я пытаюсь преобразовать его в двухслойное приложение (фронтенд и бэкэнд (узел)), используя запросы ax ios. Следующий код работает (только внешний интерфейс):

this.state.dbRef.child(User.phone).child(this.state.person.phone).on('child_added',(value)=>{
   this.setState((prevState)=>{
     return{
       messageList:[...prevState.messageList,value.val()]
     }
   })
})

Теперь я пытаюсь очистить код для использования Firebase только в бэкэнде, поэтому у меня есть внешний интерфейс:

const getMessages = await api.post('/get',{
  recipientPhone:this.state.person.phone,
  userPhone:User.phone
})
.then(response => {
    this.setState((prevState)=>{
      return{
        messageList:[...prevState.messageList,response.data]
      }
    })
})

и, наконец, бэкэнд:

async GetMessages(req,res){
firebase.database().ref('messages').child(req.body.userPhone).child(req.body.recipientPhone).on('child_added',(value,index)=>{
  array.push(value.val());
  return res.json(array); // Looping error / Cannot set headers after they are sent to the client
})
// return res.json(array); // Async error / Empty array

},

Проблема (короткая):

  1. Эта функция Firebase работает как цикл, поэтому он получает элементы один за другим, поэтому я не могу вернуть данные внутри него (если не существует какого-либо определенного способа вернуть более одного ответа на запрос) (ошибка: невозможно установить заголовки после их отправки клиенту)
  2. Я пытаюсь заполнить массив внутри цикла и возвращает его вне области цикла, но он возвращает пустой массив, даже используя async / await

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

Спасибо.

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