Функции Firebase: Нечеткая "ошибка подключения"

Я получаю эту ошибку каждый так много работает с моей облачной функцией HTTP Firebase:

Function execution took ****ms, finished with status: 'connection error'

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

Любые идеи о том, почему Firebase случайно не выполняет выполнение облачных функций с "ошибкой соединения"?

Ответ 1

Function execution took ****ms, finished with status: 'connection error' имеет две основные причины:

  • Попытка вызвать службу, отличную от Google, во время плана Spark (см. страница ценообразования). Это можно исправить путем перехода на платный план.

  1. Функция не знает, разрешено ли обещание или нет. Каждое обещание должно быть возвращено, как указано в документах здесь. Существует также запись в блоге (с полезным видео!) об этом.

Несколько примеров невозвращенных promises:

exports.someFunc = functions.database.ref(‘/some/path’).onCreate(event => {
     let db = admin.database();

     // UNRETURNED PROMISE
     db.ref("/some/path").remove();

     return db.ref("/some/other/path").set(event.data.val());
});
exports.makeUppercase = functions.database.ref('/hello/{pushId}').onWrite(event => {
    return event.data.ref.set('world').then(snap => {

      // UNRETURNED PROMISE
      admin.database().ref('lastwrite').set(admin.database.ServerValue.TIMESTAMP);

    });
});
exports.makeUppercase = functions.database.ref('/hello/{pushId}').onWrite(event => {

    // UNRETURNED PROMISE
    event.data.ref.set('world').then(snap => {
        return admin.database().ref('lastwrite').set(admin.database.ServerValue.TIMESTAMP);
    });
});

Чтобы устранить эту ошибку перед развертыванием кода, проверьте это правило eslint.

Для углубленного просмотра promises, вот несколько полезных ресурсов:

Ответ 3

Я получаю это по HTTP-триггеру, который немедленно вызывает response.end() без другого кода!

У меня была очень сложная функция, которая работала отлично, затем она перестала работать из-за этой ошибки. Я часами пытался поиграть с моим кодом, пока не осталось ничего, кроме response.end(), и все равно ошибка не исчезла.

Я обнаружил, что, удалив триггер (развертывание моих триггеров с закомментированным триггером-нарушителем), затем повторное развертывание с безкомментированным триггером, похоже, исправило его.

Возможно, есть ошибка, которая работает, которая сбрасывается при удалении триггера в облаке.

Надеюсь, это спасет кого-то от разочарования.

Ответ 4

это могут быть устаревшие библиотеки. 1. зайдите в терминал 2. внутри команды записи в папку функций

нпм устарел

это покажет все библиотеки, которые требуют обновления. 3. Для обновления библиотеки напишите команду

npm update 4. разверните облачные функции с помощью firebase deploy --only functions