#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' })