У меня нет точного решения проблемы, но я понял, что способ взаимодействия с firebase
сделал мое приложение более восприимчивым.Может быть, вы можете заметить некоторые из моих собственных недостатков дизайна в вашем проекте?
Что я обнаружил, так это то, что я звонил initializeApp
вне try/catch
, что означало, что весь модуль JavaScript будет выходить из строя всякий раз, когдаошибка обнаружена.Итак, первый обходной путь - это правильная обработка инициализации безопасно.
Во-вторых, эта ошибка стала заметной в том, как я структурировал свои вызовы на firestore()
.Например, мой первый вызов firebase.firestore()
был встроен в метод, который возвратил Promise
, то есть:
() => firebase.firestore().collection('someCollection').get().then(...).catch(e => ...);
Теперь, при таком подходе, если взаимодействие с firestore
потерпел неудачу прежде, чем Promise
мог быть возвращен, мы на самом деле catch
не ошиблись!Это потому, что это происходит слишком рано в цепочке, чтобы создать Promise
.Это означало, что опять-таки приложение, по-видимому, выходило из строя на явно более глубоком уровне, чем то, что можно было поймать внутри приложения.Но это неправильно!
Правильная реализация будет заключаться в том, чтобы обернуть взаимодействие с firebase.firestore()
в Promise
сначала:
return new Promise(resolve => firebase.firestore().collection(...)).then(q => ...).catch(e =>...);
Надеюсь, это поможет в некоторыхпуть.Я знаю, что это сложная проблема!