Firestore не выдает автономную ошибку для запросов

#typescript #firebase #google-cloud-firestore

#typescript #firebase #google-облако-firestore

Вопрос:

На моем веб-сайте я пытаюсь добавить обработку ошибок, когда Firebase может быть отключена. До сих пор мне удавалось заставить Firestore выдавать автономную ошибку только тогда, когда я извлекаю ровно один документ. Однако, когда я запрашиваю несколько документов, Firestore делает вид, что ничего плохого не произошло, и просто возвращает пустой список.

Приведенный ниже код извлекает только один документ и корректно выдает ошибку Firestore, если Firebase находится в автономном режиме / недоступен.

 const getProjectEntry = async (projectEntryId: string) => {
 const doc = await db.collection('projectentries').doc(projectEntryId).get();
 if (doc.exists amp;amp; doc) {
   return { ...doc.data(), id: doc.id } as IProjectEntry;
 }
 return null;
};
  

Приведенный ниже код извлекает несколько документов и делает вид, что все в порядке, и возвращает пустой список в автономном режиме.

 const getProjectEntries = async () => {
  const querySnapshot = (await db.collection('projectentries').get()).docs;
  return querySnapshot.map((doc) => {
    return { ...doc.data(), id: doc.id } as IProjectEntry;
  });
};
  

Ответ №1:

По умолчанию get() вызов пытается получить данные, которые вы запрашиваете с сервера, а затем возвращает их из своего кэша, если они не могут достичь сервера.

В вашем первом примере, поскольку вы запрашиваете определенный документ, который, вероятно, не существует в локальном кэше, это приводит к ошибке/

Во втором примере это приводит к запросу к локальному кэшу, который не возвращает результатов.

Таким образом, код работает так, как задумано в обоих случаях, хотя поведение отличается. Если вы хотите, чтобы сервер завершал работу с ошибкой, когда он не может связаться с сервером, укажите GetOptions в вызове get :

 db.collection('projectentries').get({ source: 'server' })