#firebase
#firebase
Вопрос:
Я размещаю проект firebase на своем компьютере с помощью firebase serve
. Когда мой Интернет отключается, я получаю сообщение об ошибке ниже, и программа завершает работу. Существует ли --option
, который позволяет автоматически переподключаться или каким-либо образом перехватывать ошибку вручную и переподключаться? Я хочу, чтобы приложение продолжало попытки подключиться, пока мой Интернет не вернется в Сеть.
> throw er; // Unhandled 'error' event
> ^
>
> Error: 14 UNAVAILABLE: Name resolution failed for target dns:firestore.googleapis.com:443
> at Object.callErrorFromStatus (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrccall.js:30:26)
> at Object.onReceiveStatus (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrcclient.js:328:49)
> at Object.onReceiveStatus (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrcclient-interceptors.js:304:181)
> at Http2CallStream.outputStatus (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrccall-stream.js:116:74)
> at Http2CallStream.maybeOutputStatus (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrccall-stream.js:155:22)
> at Http2CallStream.endCall (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrccall-stream.js:141:18)
> at Http2CallStream.cancelWithStatus (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrccall-stream.js:450:14)
> at ChannelImplementation.tryPick (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrcchannel.js:237:32)
> at ChannelImplementation._startCallStream (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrcchannel.js:267:14)
> at Http2CallStream.start (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrccall-stream.js:428:22)
> Emitted 'error' event on ClientReadableStreamImpl instance at:
> at Object.onReceiveStatus (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrcclient.js:328:28)
> at Object.onReceiveStatus (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrcclient-interceptors.js:304:181)
> [... lines matching original stack trace ...]
> at Http2CallStream.start (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrccall-stream.js:428:22)
> at BaseStreamingInterceptingCall.start (C:UsersTowerIdeaProjectsteam-up-serverfunctionsnode_modules@grpcgrpc-jsbuildsrcclient-interceptors.js:276:1
9) {
> code: 14,
> details: 'Name resolution failed for target dns:firestore.googleapis.com:443',
> metadata: Metadata { internalRepr: Map {}, options: {} }
> }
Ответ №1:
firebase serve
не рекомендуется.
Попробуйте firebase emulators:start
; У меня не возникло никаких проблем с включением / выключением / подключением к Сети при его использовании.
Документы:https://firebase.google.com/docs/rules/emulator-setup
Но обратите внимание в сообщении об ошибке, что ошибка связана с выполняемым вами вызовом Google API.
Если вы вызываете онлайн-API вместо эмулируемого, само ваше приложение должно быть настроено на повторную попытку или обработку неудачных вызовов.
Некоторые аспекты firebase действительно можно эмулировать локально; опять же, смотрите документы, связанные выше.
Комментарии:
1. На самом деле это не устранило проблему. Я думал, что это так, потому что он эмулирует базу данных на моем локальном хосте. Когда я запускаю его таким образом,
firebase emulators:start --only functions
он по-прежнему выходит из строя без Интернета. При выполнении происходит сбойfirestore.collection(...).then().catch()
Есть подвох, но он все еще сбой.2. Пожалуйста, смотрите 2-ю часть ответа о внешнем вызове API
3. Вызов API is выполняется, когда я вызываю функцию, подобную этой
firestore().collection(...).get().then().catch()
..catch()
В конце должно обработать ошибку, но она все еще выдает ошибку. Я также попытался обернуть все это в блок try / catch, но это все равно завершает работу программы.