Кеш запросов Firestore - PullRequest
       0

Кеш запросов Firestore

0 голосов
/ 05 апреля 2020

У меня есть 1 метод в моем хранилище, в котором я получаю статус. Либо это статус 0 или 1. Если это 0, мне нужно сгенерировать запрос, отличный от 1, скажем,

fun getData(status:Int) {
 val docRef = FirebaseFirestore.getInstance().collection("orders")
 if(status == 0){
  docRef.whereEqualTo("status",0)
 }else{
  docRef.whereGreaterThanOrEqualTo("status",1).whereLessThan("status",4)
}

 val suscription = docRef.addSnapshotListener { ... }

Теперь я использую этот метод для запроса со статусом 0 или статусом 1 разных документов в моей коллекции, теперь, когда я вернусь, где статус равен 0 в моем пользовательском интерфейсе, Firestore кеширует эти два запроса и возвращает мне кешированный docRef статуса 0? или это потребует все документы снова, потому что в том же методе и нет двух разных docRefs?

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

Я хочу знать, будет ли этот условный оператор If кэшировать два запроса в мой клиент, когда мне понадобится либо первый, либо второй ниже

Edit

Этот вопрос связан с тем, что если мне нужно создать отдельный метод со всеми одинаковыми данными, но с другой ссылкой для хранения данных

спасибо

1 Ответ

1 голос
/ 05 апреля 2020

Прежде всего, ваш метод должен выглядеть следующим образом:

fun getData(status:Int) {
    val docRef = FirebaseFirestore.getInstance().collection("orders")
    if(status == 0){
        docRef = docRef.whereEqualTo("status",0)
    } else {
        docRef = docRef.whereGreaterThanOrEqualTo("status",1).whereLessThan("status",4)
    }
}
val suscription = docRef.addSnapshotListener { /* ... */ }

И это потому, что запросы Cloud Firestore являются неизменяемыми, что означает, что вы не можете изменять свойства существующего запроса. Если вы измените значение, вызвав метод .whereEqualTo("status",0), он станет новым запросом.

Firestore кеширует эти два запроса и возвращает мне кэшированный docRef со статусом 0?

Firestore будет кэшировать все документы, которые возвращаются по вашему запросу. Если срабатывает if part оператора, то в кеше у вас будут только эти документы, в противном случае у вас будут другие.

Я хочу знать, является ли это условный оператор If будет кешировать два запроса в мой клиент, когда мне понадобится либо первый, либо второй ниже

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

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