Тайм-аут записи в облачную функцию в базу данных 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!");
})