Облачная функция Firebase: как выполнить сбой при повторной попытке, не вызывая холодного запуска?

#javascript #firebase #google-cloud-platform #google-cloud-functions

# #javascript #firebase #google-cloud-platform #google-облачные функции

Вопрос:

Учитывая облачную функцию Firebase, каков правильный способ провалить событие (с намерением повторить его), не вызывая холодного запуска?

В этой документации предполагается, что необработанные ошибки вызывают холодный запуск. При использовании async функциональности я предполагаю, что это относится и к отклоненному Promise .

выдает новую ошибку (‘Я подвел вас’); // Вызовет холодный запуск, если не будет пойман

Учитывая, что функции часто будут полагаться на сторонние сервисы, которые могут быть не на 100% надежными, я не хочу, чтобы мои функции подвергались дополнительным штрафам при холодном запуске из-за временных ошибок в потоке.

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

Ответ №1:

Отклоненное обещание само по себе не является «необработанной ошибкой». То, что вы показываете, является выброшенным исключением и не имеет прямого отношения к обещаниям. Генерируемое исключение, которое избегает обратного вызова функции, считается необработанным. Если вам нужно сознательно провалить вызов функции, просто верните отклоненное обещание, ничего не выбрасывайте, как это делает ваш приведенный пример кода сейчас.

Простое отклоненное обещание может быть создано при необходимости с помощью Promise.reject():

 return Promise.reject(new Error('fail'))