Тайм-аут записи в облачную функцию в базу данных Firebase Realtime

Я вижу, что новая запись добавляется, как только я получаю URL, но запрос зависает и время ожидания истекло. Зачем?

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.add = functions.https.onRequest((request, response)=>
{
    var ref = admin.database().ref("jobs");
    var childRef = ref.push();
    childRef.set
    (
        {
            title: "test",
            pay: 100
        }
    );
})

Код основан на следующем примере. https://firebase.google.com/docs/database/admin/save-data

Результат

{"error":{"code":500,"status":"INTERNAL","message":"function execution attempt timed out"}}

1 ответ

Решение

Облачные функции, запускаемые HTTP-запросами, необходимо прекратить, завершив их send(), redirect(), или же end()иначе они продолжат работать и достигнут тайм-аута.

Из раздела "Завершить функции HTTP" документации по триггерам HTTP:

Всегда заканчивайте HTTP-функцию send(), redirect(), или же end(), В противном случае ваша функция может продолжить работу и быть принудительно прервана системой. Смотрите также Синхронизация, Асинхронизация и Обещания.

Поэтому в вашем примере вы можете завершить запрос, отправив ответ:

exports.add = functions.https.onRequest((request, response)=>
{
    var ref = admin.database().ref("jobs");
    var childRef = ref.push();
    childRef.set
    (
        {
            title: "test",
            pay: 100
        }
    );
    response.status(200).send("OK!");
})
Другие вопросы по тегам