Я использую React Native с базой данных Firebase Realtime. Тестирую простое приложение для чата, и я получаю чаты следующим образом:
this.friendChatRef = this.db.ref('messages/' + this.chat_id + '/' + this.friend_id)
const friendChatRef = this.friendChatRef.limitToLast(9)
const fcrp = friendChatRef.once('value')
Цель состоит в том, чтобы всегда получать последние 9 сообщений из беседы при монтировании компонента/представления.
Проблема в том, что он получит 9 чатов, но они никоим образом не являются последними. Я могу добавить более 10 новых сообщений, но они никогда не будут получены, пока я не добавлю это:
friendChatRef.keepSynced(true)
Затем каждый раз, когда я захожу в чат, он будет получать последние 9 сообщений.
Почему мы должны использовать keepSynced? Я думал, что постоянство предназначено только для кэширования данных в автономном режиме, но оно всегда проверяет, устарели ли кэшированные данные или нет, каждый раз, когда вы создаете ссылку и извлекаете данные?
Есть ли способ сохранить постоянство и не использовать keepSynched для получения последних данных?
keepSynced
они просто не будут извлекаться, как должны, а сtrue
работают как положено. - person AlwaysConfused   schedule 18.06.2019once()
, который плохо работает вместе с сохраняемостью диска. См. мои подробные ответы здесь разница между setpersistenceenabled и keepsynced">stackoverflow.com/questions/40190234/ и stackoverflow.com/questions/34486417/. По сути: вам нужно либо использоватьon()
, либоkeepSynced
(что по существу сохраняет пустой прослушивательon()
в местоположении), чтобы это работало. - person Frank van Puffelen   schedule 18.06.2019keepSynced
, так как для меня всегда иметь прослушиватель - не лучший вариант. - person AlwaysConfused   schedule 18.06.2019keepSynced(true)
добавляет к местоположению пустой прослушиватель. - person Frank van Puffelen   schedule 18.06.2019